【问题标题】:Multi-column index order for queries with ORDER BY使用 ORDER BY 的查询的多列索引顺序
【发布时间】:2014-03-27 07:54:05
【问题描述】:

我应该如何为以下查询订购我的多列索引?

SELECT * 
FROM example_table 
WHERE a=3 AND b=4 
  AND c=5 ORDER BY d, e;

我假设我想创建一个具有 a、b、c、d、e 顺序的索引:

CREATE INDEX example_index 
    ON example_table (a, b, c, d, e); 

但我是否应该在索引中先按列排序?

CREATE INDEX example_index 
    ON example_table (d, e, a, b, c);

【问题讨论】:

  • 我希望ORDER BY Optimization 有所帮助。
  • 试着用两列来考虑它——比如人们的名字和第二个名字(假设每个人都有两个名字)。我将为您提供他们所有姓名的列表,按他们的姓氏排序,然后按名字排序,并要求您找到我所有称为John 的人,并根据他们的姓氏对您的输出进行排序。然后我会给你同样的任务,但给你一个列表,首先按名字排序,然后按姓氏排序。您认为这两个列表中哪一个更容易使用?
  • @Damien_The_Unbeliever,我知道我想比较的列。我的问题是 ORDER BY 列应该在索引列列表中的 WHERE 列之前还是之后。
  • 如果我给了你我的第一个列表(先按姓氏排序,然后按名字排序)并要求你找到所有姓氏John的人,这个列表对你有帮助吗?您必须浏览整个 列表才能找到所有Johns。是的,您找到它们的顺序是您想要的输出顺序,但是搜索需要很长时间。将其与我的第二个列表(名字然后姓氏)进行比较-您直接跳转到Johns,然后找到它们都按姓氏顺序列出。

标签: sql postgresql indexing sql-order-by


【解决方案1】:

你想要第一种形式:

CREATE INDEX example_index ON example_table (a, b, c, d, e);

如果必须扫描 整个 索引以通过 WHERE 子句过滤器找到您感兴趣的行,那么首先按所需的输出顺序对索引进行排序是没有意义的。

【讨论】:

    猜你喜欢
    • 2013-12-22
    • 2017-12-16
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2019-06-20
    相关资源
    最近更新 更多