我正在为PostgreSQL数据库创建索引。我想知道用于对PostgreSQL语句中的结果进行排序的列是否应该包括在索引中。
假设我已经在PostgreSQL数据库中创建了一个标签为'table1‘的表,其中包含标签为'col1’、'col2‘和'col3’的列。
我想执行以下查询:
SELECT * FROM table1 WHERE col1 = 'word1' AND col2 = 'word2' ORDER BY col3;我知道此搜索的索引应该包括WHERE子句中引用的所有列,因此,在本例中,索引将包括col1和col2。
该指数是否也应该包括col3?
发布于 2021-01-26 08:49:11
因为您有相等的比较,Postgres应该能够在(col1, col2, col3)上使用索引。
前两列用于where子句;最后一列用于order by。
请注意,这是专门针对您的查询的。它假定字符串上的排序规则是兼容的,并且没有类型转换。此外,对于要用于order by的索引,where中的比较必须是相等比较。
我认为order by的方向也必须与索引中定义的方向相匹配。
我发现关于多列索引的MySQL documentation是对该主题的一个很好的介绍。它重点介绍了where子句,但它很好地说明了何时可以使用索引,什么时候不可以使用索引--而且数据库之间的规则往往是相似的。
https://stackoverflow.com/questions/65893876
复制相似问题