什么是覆盖索引?如何利用覆盖索引进行SQL语句优化?
如果你不知道什么是覆蓋索引,那么SQL性能優(yōu)化便無(wú)從談起!
什么是覆蓋索引?如何利用索引進(jìn)行SQL語(yǔ)句優(yōu)化?
表結(jié)構(gòu)
150多萬(wàn)的數(shù)據(jù),這么一個(gè)簡(jiǎn)單的語(yǔ)句:
慢查詢(xún)?nèi)罩纠锞尤缓芏嘤昧?秒的,Explain的結(jié)果是:
從Explain的結(jié)果可以看出,查詢(xún)已經(jīng)使用了索引,但為什么還這么慢?
分析:首先,該語(yǔ)句ORDER BY 使用了Using filesort文件排序,查詢(xún)效率低;其次,查詢(xún)字段不在索引上,沒(méi)有使用覆蓋索引,需要通過(guò)索引回表查詢(xún);也有數(shù)據(jù)分布的原因。
知道了原因,那么問(wèn)題就好解決了。
解決方案:由于只需查詢(xún)uid字段,添加一個(gè)聯(lián)合索引便可以避免回表和文件排序,利用覆蓋索引提升查詢(xún)速度,同時(shí)利用索引完成排序。
覆蓋索引:SQL只需要通過(guò)索引就可以返回查詢(xún)所需要的數(shù)據(jù),而不必通過(guò)二級(jí)索引查到主鍵之后再去查詢(xún)數(shù)據(jù)。
我們?cè)貳xplain看一次:
Extra信息已經(jīng)有'Using Index',表示已經(jīng)使用了覆蓋索引。經(jīng)過(guò)索引優(yōu)化之后,線上的查詢(xún)基本不超過(guò)0.001秒。
總結(jié)
以上是生活随笔為你收集整理的什么是覆盖索引?如何利用覆盖索引进行SQL语句优化?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 两性位置
- 下一篇: mysql+tushare搭建本地数据库