let*_*ght 13 postgresql database-indexes
我无法找到关于这个主题的一些现有帖子的任何结论性答案.
过去10年我在100个地点都有一些数据.该表有大约8亿行.我需要主要为每个位置生成年度统计数据.有时我需要生成每月变化统计数据和每小时变化统计数据.我想知道我是否应该生成两个索引 - 一个用于位置,另一个用于年份或在位置和年份生成一个索引.我的主键当前是序列号(可能我可以使用位置和时间戳作为主键).
谢谢.
Ild*_*sin 15
无论您在关系上创建了多少个索引,在某个查询中只会使用其中一个索引(哪一个取决于查询,统计信息等).因此,在您的情况下,您将无法通过创建两个单列索引获得累积优势.为了从索引获得最大性能,我建议在(位置,时间戳)上使用复合索引.
请注意,像查询... WHERE timestamp BETWEEN smth AND smth
不会使用上面,而查询,如索引... WHERE location = 'smth'
或... WHERE location = 'smth' AND timestamp BETWEEN smth AND smth
意愿.这是因为索引中的第一个属性对于搜索和排序至关重要.
别忘了表演
ANALYZE;
Run Code Online (Sandbox Code Playgroud)
创建索引后,以收集统计信息.
对于这种情况,没有经验法则,建议您在生产数据库的副本中进行实验,以查看哪种最适合您:单个多列索引或2个单列索引。
Postgres的一个不错的功能是您可以拥有多个索引,并在同一查询中使用它们。检查文档的这一章:
... PostgreSQL具有组合多个索引的能力...以处理无法通过单个索引扫描实现的情况....
...有时多列索引是最好的,但有时最好创建单独的索引并依靠索引组合功能...
您甚至可以尝试创建单个索引和组合索引,并检查每个索引的大小并确定是否值得同时拥有它们。
您还可以尝试一些操作:
关于放置多列索引的顺序,首先在要进行相等运算的列上放置,然后在要进行范围>=
或<=
运算的列上放置。
归档时间: |
|
查看次数: |
8409 次 |
最近记录: |