mysql慢查詢優化篇之複合索引

概念:

索引列爲一列的情況,即新建索引的語句只實施在一列上的話,就是指單一索引。用戶可以在多個列上建立索引,這種索引叫做複合索引(組合索引)。複合索引的創建方法與創建單一索引的方法完全一樣。但複合索引在數據庫操作期間所需的開銷更小,可以代替多個單一索引。當表的行數遠遠大於索引鍵的數目時,使用這種方式可以明顯加快表的查詢速度。

同時有兩個概念叫做窄索引和寬索引,窄索引是指索引列爲1-2列的索引,如果不特殊說明的話一般是指單一索引。寬索引也就是索引列超過2列的索引。

設計索引的一個重要原則就是能用窄索引不用寬索引,因爲窄索引往往比組合索引更有效。擁有更多的窄索引,將給優化程序提供更多的選擇餘地,這通常有助於提高性能。

 

複合索引應用示例:

某遊戲社區要顯示用戶動態,select * from userfeed where uid=$uid order by lastlogin desc limit 0,30;   初期默認以uid爲索引字段, 查詢爲命中所有uid=$uid的結果按照lastlogin排序。 當用戶行爲非常頻繁時,該SQL索引命中影響結果集有數百乃至數千條記錄。查詢效率超過0.01秒,併發較大時數據庫壓力較大。
解決方案:將索引改爲 uid+lastlogin 複合索引,索引直接命中影響結果集30條,查詢效率提高了10倍,平均在0.001秒,數據庫壓力驟降。

小貼士:

數據索引的存儲是有序的,在有序的情況下,通過索引查詢一個數據是無需遍歷索引記錄的,極端情況下,數據索引的查詢效率爲二分法查詢效率,趨近於 log2(N)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章