[英]Should the column used to order results be included in the index of a postgresql table?
我正在为 PostgreSQL 数据库创建索引。 我想知道在 PostgreSQL 语句中用于排序结果的列是否应包含在索引中。
假设我在 PostgreSQL 数据库中创建了一个带有 label 'table1' 的表,其中列标记为“col1”、“col2”和“col3”。
我想执行以下查询:
SELECT * FROM table1 WHERE col1 = 'word1' AND col2 = 'word2' ORDER BY col3;
我知道这个搜索的索引应该包括WHERE
子句中引用的所有列,所以在这种情况下,索引将包括 col1 和 col2。
索引是否还应该包括 col3?
因为您有相等比较,所以 Postgres 应该能够在(col1, col2, col3)
上使用索引。
前两列用于where
子句; 最后为order by
。
请注意,这非常适合您的查询。 它假设字符串上的排序规则是兼容的并且没有类型转换。 此外, where
中的比较需要是用于order by
的索引的相等比较。
我相信order by
的方向也必须与索引中定义的方向相匹配。
我发现关于多列索引的MySQL 文档是对该主题的一个很好的介绍。 它侧重于where
子句,但它很好地说明了何时可以使用和不能使用索引——并且这些规则在数据库中往往是相似的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.