2014-02-25 41 views
0

如何爲以下查詢訂購我的多列索引?帶有ORDER BY查詢的多列索引順序

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

我想我會想創建一個,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); 
+0

我希望[ORDER BY Optimization](https://www.google.com.ph/?gws_rd=cr&ei=b7NMUqSEN-i4iQedhYDQBg#q=index+order+by+mysql)有所幫助。 – Diaton

+0

試着用兩列來思考它 - 說民族的第一和第二個名字(假設每個人都有兩個名字)。我要給你列出他們所有的名字,按照他們的第二個名字,然後是第一個名字排序,並要求你找到我所有叫做John'的人,並根據他們的姓氏對你的輸出進行排序。然後我會給你做同樣的任務,但給你一個首先按姓氏排序,然後按姓氏排序的列表。您認爲您可以更輕鬆地使用這兩個列表中的哪一個? –

+0

@Damien_The_Unbeliever,我知道我想要比較的列。我的問題是'ORDER BY'列應該在索引列表中的WHERE列之前還是之後。 –

回答

0

你想第一種形式:

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

有一個在所需的輸出順序上先進行排序,指數是沒有意義的,如果整個指數已經被掃描以查找的行,你'您對WHERE子句過濾器感興趣。