复合索引的列顺序判断
生活随笔
收集整理的這篇文章主要介紹了
复合索引的列顺序判断
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
復合索引最令人困惑的當屬索引列的順序,不僅依賴于使用該索引的查詢,更需考慮排序和分組。 前段時候我發了個帖子:where條件順序和復合索引字段順序。感興趣的朋友不妨參與討論。 今天我提個自己的觀點。 在應用開發階段,【選擇性】是我們首要考慮因素,請看簡圖: 當出現sql性能問題時,你可能需要注意以下幾個: 1. 隨機IO 2. 排序(order by) 3. 分組(group by or distinct) 這時不必也不應該在關注【選擇性】 我的經驗便是,在你手上已經有Top N SQL時,我們應該優先考慮【值的分布】,而不是選擇性。 那么該如何判斷【值的分布】,我們通過一種被geek稱之為 【sarg】的方法,具體操作如下: 假如,我們有如下query: [sql] view plaincopy print? select?*?from?userresult_f?where?askid=800808?and?uid=110996854;?? select * from userresult_f where askid=800808 and uid=110996854; 則有2個索引可供選擇: 1. idx_1 (askid,uid) 2. idx_2 (uid,askid) 是1 還是2 ? 利用【sarg】方法: [sql] view plaincopy print? mysql>?select?sum(askid=800808),sum(uid=110996854)?from?userresult_f\G;?? ***************************?1.?row?***************************?? sum(askid=800808):?6?? sum(uid=110996854):?2?? 1?row?in?set?(0.00?sec)?? mysql> select sum(askid=800808),sum(uid=110996854) from userresult_f\G;
*************************** 1. row ***************************
sum(askid=800808): 6
sum(uid=110996854): 2
1 row in set (0.00 sec) 依據查詢輸出,我們應該選擇 idx_2 By 數據牧羊人 Good Luck! 2014-4-27 19:05 ?于福州
總結
以上是生活随笔為你收集整理的复合索引的列顺序判断的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker将在存储上崭露头角?
- 下一篇: 《MonoTouch开发实践指南》一3.