繁体   English   中英

用于排序结果的列是否应该包含在 postgresql 表的索引中?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM