sql - 用于排序结果的列是否应该包含在 postgresql 表的索引中?
问题描述
我正在为 PostgreSQL 数据库创建索引。我想知道用于在 PostgreSQL 语句中对结果进行排序的列是否应该包含在索引中。
假设我在 PostgreSQL 数据库中创建了一个标签为“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
子句,但它很好地说明了何时可以使用和不能使用索引——并且这些规则在数据库中往往是相似的。
推荐阅读
- kendo-ui - Kendo MVC - 在网格中需要 DatePicker
- javascript - 此 Worker 不支持 requestAnimationFrame
- java - 如何使用 android 的 Volley HTTP GET 调用响应来减少延迟
- big-o - 证明大 O 复杂性的建议
- java - 一个类可以有两个同名的无参数方法吗?
- python - 在 Numpy 中使用 argsort 对列表进行排序?
- sql - 查询语句中的 Rose::DB 掩码
- c++ - 位操作和异或
- powershell - PowerShell中的Monad?
- python-3.x - 将字符串中的数据提取为带有一些标题的列值