Som*_*Guy 3 postgresql indexing compound-index postgresql-performance
对于PostgreSQL,我想在三列上使用复合索引A, B, C。B是created_at日期时间,有时我可能不带进行查询B。
如果我在上复合索引,(A, B, C)然后在A和上查询条件C,但没有,该B怎么办?(也就是说,A而C但希望它在所有的时候,不只是一些特定的时间范围?)
Postgres是否足够聪明,仍然可以使用(A, B, C)复合索引而只跳过B?
Postgres可以在b树索引中使用非前导列,但是效率要低得多。
如果第一列具有很高的选择性(每个列仅几行A),那么您几乎不会注意到性能上的差异,因为任何一种访问方法(甚至是对精简集的顺序扫描)都很便宜。性能影响随着每行的行数而增加A。
对于您描述的情况,我建议在(A, C, B)或(C, A, B)(仅确保B最后出现)上创建索引以优化性能。这样,你得到的查询最佳性能(A, B, C)和(A, C)一致好评。
与索引中的列顺序不同,查询中的谓词顺序并不重要。
我们已经在dba.SE上对此进行了详细讨论:
请注意,无论是牵头还是手头的案件,都没关系:A, CC, A
还有其他一些注意事项,但您的问题并不包含所有相关细节。
| 归档时间: |
|
| 查看次数: |
347 次 |
| 最近记录: |