Postgres可以在b树索引中使用非前导列,但是效率要低得多。
如果第一列具有很高的选择性(每个列仅几行A),那么您几乎不会注意到性能上的差异,因为任何一种访问方法(甚至是对简化集合的顺序扫描)都便宜。性能影响随着每行的行数而增加A。
对于您描述的情况,我建议在(A, C, B)或(C, A, B)(只需确保B倒数)上创建索引以优化性能。这样,你得到的查询最佳性能(A, B, C)和(A, C)一致好评。
与索引中的列顺序不同,查询中的谓词顺序并不重要。
我们已经在dba.SE上对此进行了详细讨论:
PostgreSQL中的索引工作请注意,无论是牵头处理还是处理当前案例,都没有关系:A, CC, A
多列索引和性能还有其他一些注意事项,但是您的问题没有所有相关细节。