假设我们有一张包含600万条记录的表格.有16个整数列和几个文本列.它是只读表,因此每个整数列都有一个索引.每条记录大约50-60字节.
表名为"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;
Run Code Online (Sandbox Code Playgroud)
我还有第二个,更经典的选择.
不要将列a_elements添加到表项,而是创建具有两列的表元素:
该表将有大约200万条记录.
我能够对这些表进行分区,因此表元素中的记录数将减少到20万,表项中减少500 K.
第二个选项查询如下所示:
select item.*
from item
left join elements on (item.id_item=elements.id_item)
where ....
and 5 = elements.id_element
Run Code Online (Sandbox Code Playgroud)
我想知道在性能方面哪种选择会更好.postgres能够在单个查询中使用索引GIN(选项1)的许多不同索引吗?
我需要做出一个好的决定,因为导入这些数据需要20天.