【发布时间】: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