2012-06-19 48 views
1

我想對某些字段執行排序操作。在該領域做出索引是否有利?例如:在索引字段上排序是否有優勢

SELECT * FROM `users` WHERE `age`=33 ORDER BY `name` 

在這個查詢中,我知道有一個關於年齡的索引是有幫助的,但是如果我維護一個名稱索引會更好。索引它會有一個性能增益嗎?其他查詢也經常需要ORDER BY操作。

+1

有33歲以上的用戶嗎?關於「名稱」的單獨的額外索引可能不太有用,但可能是索引(年齡,名稱)。 – Thilo

回答

5

單獨使用name上的索引對於此查詢可能不會有很大幫助,但(age, name)上的索引可能不會。

雖然它不完全準確,但將索引視爲按索引中按鍵排序的行列表(例如,首先按age排序,然後按name排序),通常具有指導意義。對於您的示例查詢,所有具有age=33的行自然會從按名稱排序的組合索引中排除,從而使您無法進行單獨的排序。有一個單獨的索引name不會以同樣的方式幫助。

+0

實際上對於其他查詢,我會需要結果按名稱排序,並且在where子句 –

+0

+1中不一定需要年齡字段。如果在WHERE子句之後只剩下幾條記錄,它也不會有太大的差別。 – Thilo

+0

@SushantGupta:嗯,你必須建立索引來匹配你的查詢。也許每個人都不一樣。否則,指數將不會非常有效。特別是,「某種程度上」涵蓋了所有查詢的索引,但沒有一個真的很好,並不是一個好的索引。 – Thilo

相關問題