首页 > 解决方案 > 用于排序结果的列是否应该包含在 postgresql 表的索引中?

问题描述

我正在为 PostgreSQL 数据库创建索引。我想知道用于在 PostgreSQL 语句中对结果进行排序的列是否应该包含在索引中。

假设我在 PostgreSQL 数据库中创建了一个标签为“table1”的表,其中列标签为“col1”、“col2”和“col3”。

我想执行以下查询:

SELECT * FROM table1 WHERE col1 = 'word1' AND col2 = 'word2' ORDER BY col3;

我知道这个搜索的索引应该包括WHERE子句中引用的所有列,所以在这种情况下,索引将包括 col1 和 col2。

索引是否还应该包括 col3?

标签: sqldatabasepostgresqlindexingsql-order-by

解决方案


因为您有相等比较,所以 Postgres 应该能够在(col1, col2, col3).

前两列用于where子句;最后为order by.

请注意,这非常适合您的查询。它假设字符串上的排序规则是兼容的并且没有类型转换。此外,where对于要用于order by.

我相信 的方向order by也必须与索引中定义的方向相匹配。

我发现关于多列索引的MySQL 文档是对该主题的一个很好的介绍。它侧重于where子句,但它很好地说明了何时可以使用和不能使用索引——并且这些规则在数据库中往往是相似的。


推荐阅读