当前位置: 首页 > 知识库问答 >
问题:

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

鄢雅畅
2023-03-14

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

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

我想执行以下查询:

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

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

指数应该也包括col3吗?

共有1个答案

隗翰海
2023-03-14

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

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

请注意,这是非常专门针对您的查询的。它假设字符串上的归类是兼容的,并且没有类型转换。此外,中的比较需要是用于order by的索引的相等比较。

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

我发现多列索引上的MySQL留档是对这个主题的一个很好的介绍。它侧重于Anywhere子句,但是它给出了何时可以使用索引和何时不能使用索引的很好的味道——而且跨数据库的规则往往是相似的。

 类似资料:
  • 按降序排序的LinkedHashSet的输出。 对不起,如果这是混淆,我不知道如何去排序像这样。

  • 问题内容: 我看到人们正在使用另一个列表来查看列表中是否存在某项,但是有一种快速的方法吗?: 问题答案: 您可以使用以下语法: 同样,逆运算符: 它适用于列表,元组,集合和字典(检查键)。 请注意 ,这是列表和元组中的O(n)操作,而集合和字典中是O(1)操作。

  • 问题内容: 我的字符串列表如下所示: 我的期望是,我想检查父列表是否包含 序列 子列表,然后基于子列表获取父列表中的开始索引和结束索引。 从上面的示例: 我尝试使用方法,但它不在乎列表项的顺序,因此无法从此方法获取开始和结束索引。 我正在寻找最快的方法,因为我的列表中有很多数据,而且我必须从许多输入字符串中进行搜索。 任何帮助,将不胜感激! 更新 : 我需要获取所有子列表的索引都包含在父列表中。例

  • 问题内容: 这是很常见的,我遍历一个Python列表,让双方的内容 和 他们的索引。我通常会执行以下操作: 我发现这种语法有点难看,尤其是函数内部的部分。还有其他更优雅/ Python风格的方法吗? 问题答案: 使用内置函数:http : //docs.python.org/library/functions.html#enumerate

  • 问题内容: 因此,请考虑以下表格: 桌子: id(整数,主键) 11 c2 c3 c4 c5 假设我使用的查询在运行时有所不同(例如,一个网站,其中的复选框表示是否要在特定字段上进行搜索),一些可能的实例是: (使用一些值) 问题: 索引的作用是什么?在几个查询中将如何使用它? 在此表上创建最佳索引是什么? 问题答案: MySQL文档做了解释多列索引是如何工作的一个很好的工作在这里。 通常,当索引

  • 问题内容: 我知道如何创建索引 以及如何检查索引是否已存在? 我需要检查它们的存在并创建它们(如果还不存在)。 问题答案: 您可以使用以下查询获取索引列表,它们的表和列: 从那里,您可以按索引名称或所涉及的列检查是否存在,并决定创建/跳过索引。