我有一个Postgres表,其中有500k行,只能读取(很多用户读取)。我想知道是否将数据库按行的“出生日期”一分为二会更有效。
我有一半的桌子要查询得多(出生日期> 40)。因此,按生日将其拆分会允许我直接检查一个较小的子集(只需检查我的元素是否大于40)即可。这种方法有什么改善吗?
答案 0 :(得分:2)
索引可以解决您的问题。通过存储表的不同部分来拆分表只会使事情复杂化。
答案 1 :(得分:1)
SiWM是正确的。不要拆分您的表,尤其是考虑到按今天的标准,500k并不是很大的数目。作为SiWM的建议的补充,我建议您在查询表时检查WHERE子句中的哪些列,并确保将它们编入索引。
答案 2 :(得分:1)
您还可以使用所使用的主索引(通过cron作业)对表进行聚簇,尤其是在需要从单个查询返回几行的情况下。
https://www.postgresql.org/docs/9.1/sql-cluster.html
初始设置:
CLUSTER [VERBOSE] table_name [ USING index_name ]
重新集群:
CLUSTER table_name