假設我們有一個包含600萬條記錄的表。有16個整數列和幾個文本列。它是隻讀表,因此每個整數列都有一個索引。 每個記錄大約50-60個字節。Postgresql - 在大數據庫中使用數組的性能
表名是「Item」
服務器是:12 GB RAM,1,5 TB SATA,4個CORES。所有服務器的postgres。
此數據庫中有更多的表,因此RAM不覆蓋所有數據庫。
我想在表格「Item」中添加一列「a_elements」(大整數的數組類型) 每一條記錄在該列中的元素不會超過50-60個。
之後,我將創建此列,典型的查詢索引GIN應該是這樣的:
select * from item where ...... and '{5}' <@ a_elements;
我也有第二個,更經典,選項。
不要用兩列列a_elements添加到表項目,但創建表的元素:
- id_item
- id_element
此表將有大約200萬的記錄。
我能夠對這些表進行分區,因此記錄數將減少到表元素中的20毫升和表項中的500 K。
第二個選項查詢看起來是這樣的:
select item.*
from item
left join elements on (item.id_item=elements.id_item)
where ....
and 5 = elements.id_element
我不知道什麼選擇是在性能上來看比較好。 是否可以在單個查詢中使用帶索引GIN(選項1)的許多不同索引?
我需要做出正確的決定,因爲導入這些數據需要20天。
嗨!你最後的決定是什麼?我有幾乎相同的情況。 – 2015-03-17 06:42:17