首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于对结果进行排序的列是否应该包含在postgresql表的索引中?

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

Stack Overflow用户
提问于 2021-01-26 07:31:59
回答 1查看 41关注 0票数 0

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

假设我已经在PostgreSQL数据库中创建了一个标签为'table1‘的表,其中包含标签为'col1’、'col2‘和'col3’的列。

我想执行以下查询:

代码语言:javascript
复制
SELECT * FROM table1 WHERE col1 = 'word1' AND col2 = 'word2' ORDER BY col3;

我知道此搜索的索引应该包括WHERE子句中引用的所有列,因此,在本例中,索引将包括col1和col2。

该指数是否也应该包括col3?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-26 08:49:11

因为您有相等的比较,Postgres应该能够在(col1, col2, col3)上使用索引。

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

请注意,这是专门针对您的查询的。它假定字符串上的排序规则是兼容的,并且没有类型转换。此外,对于要用于order by的索引,where中的比较必须是相等比较。

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

我发现关于多列索引的MySQL documentation是对该主题的一个很好的介绍。它重点介绍了where子句,但它很好地说明了何时可以使用索引,什么时候不可以使用索引--而且数据库之间的规则往往是相似的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65893876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档