在我擁有的資料中,大約有 1M 行,每行大約有 60-70 列。然而,只有少數行(20-30)會填充超過 30 的列,即表是稀疏的。而且很少查詢超過 30 的列。
“列數”會影響性能嗎?
我應該做兩張桌子嗎?一個具有前 30 列,第二個表是原始表。
還是我應該保留原來的結構?
表架構:- 表 entity_table (entity_id int, tag_1 text, tag_2 text, . . . tag_30 text, --upto col. 30 table is dense tag_31 text, ... tag_70 text --sparse columns);
此外,這些列的型別是否會影響性能。postgres 是否索引空值,如何防止?
uj5u.com熱心網友回復:
“列數”會影響性能嗎?簡短的回答是“是的,但不要擔心。”
更準確地說,它占用了空間,并且該空間必須往返于磁盤、占用快取等。所有這些都會消耗資源。確切的空間量取決于列,并且可以在 postgres 檔案中的每個資料型別旁邊獲得資料型別:https ://www.postgresql.org/docs/14/datatype.html
正如弗蘭克海肯斯評論的那樣,如今一百萬行并不多。在 70 列中,一百萬行每列 8 個位元組,你會看到大約 560M,這很適合 Raspberry PI 上的記憶體,所以應該沒什么大不了的。
然而,當你達到數十億或數萬億行時,所有這些小位元組真的開始加起來。因此,您可能會查看:
- 拆分表 - 但是,如果這導致更多連接,您會發現整體性能變得更糟而不是更好
- 使用較小的列型別(例如 smallint 而不是 int)
- 重新排序列 - 請參閱PostgreSQL 中的計算和節省空間但是,我不建議將此作為起點 - 先設計可讀性,然后再設計性能
- 列式存盤https://en.wikipedia.org/wiki/Column-oriented_DBMS有一些我沒有直接經驗但可能值得一看的 postgres 選項,例如https://www.buckenhofer.com/ 2021/01/postgresql-columnar-extension-cstore_fdw/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/444593.html
標籤:sql 数据库 PostgreSQL
