如果你不知道什么是覆蓋索引,那么SQL性能優化便無從談起!
什么是覆蓋索引?如何利用索引進行SQL語句優化?
表結構
150多萬的數據,這么一個簡單的語句:
慢查詢日志里居然很多用了1秒的,Explain的結果是:
從Explain的結果可以看出,查詢已經使用了索引,但為什么還這么慢?
分析:首先,該語句ORDER BY 使用了Using filesort文件排序,查詢效率低;其次,查詢字段不在索引上,沒有使用覆蓋索引,需要通過索引回表查詢;也有數據分布的原因。
知道了原因,那么問題就好解決了。
解決方案:由于只需查詢uid字段,添加一個聯合索引便可以避免回表和文件排序,利用覆蓋索引提升查詢速度,同時利用索引完成排序。
覆蓋索引:SQL只需要通過索引就可以返回查詢所需要的數據,而不必通過二級索引查到主鍵之后再去查詢數據。
我們再Explain看一次:
Extra信息已經有'Using Index',表示已經使用了覆蓋索引。經過索引優化之后,線上的查詢基本不超過0.001秒。