Mysql性能優(yōu)化案例 - 覆蓋索引分享
場(chǎng)景
產(chǎn)品中有一張圖片表,數(shù)據(jù)量將近100萬(wàn)條,有一條相關(guān)的查詢語(yǔ)句,由于執(zhí)行頻次較高,想針對(duì)此語(yǔ)句進(jìn)行優(yōu)化
表結(jié)構(gòu)很簡(jiǎn)單,主要字段:
user_id 用戶ID
picname 圖片名稱
smallimg 小圖名稱
一個(gè)用戶會(huì)有多條圖片記錄
現(xiàn)在有一個(gè)根據(jù)user_id建立的索引:uid
查詢語(yǔ)句也很簡(jiǎn)單:取得某用戶的圖片集合
select picname, smallimg
from pics where user_id = xxx;
優(yōu)化前
執(zhí)行查詢語(yǔ)句(為了查看真實(shí)執(zhí)行時(shí)間,強(qiáng)制不使用緩存)
select SQL_NO_CACHE picname, smallimg
from pics where user_id=17853;
執(zhí)行了10次,平均耗時(shí)在40ms左右
使用explain進(jìn)行分析
explain select SQL_NO_CACHE picname, smallimg
from pics where user_id=17853
使用了user_id的索引,并且是const常數(shù)查找,表示性能已經(jīng)很好了
優(yōu)化后
因?yàn)檫@個(gè)語(yǔ)句太簡(jiǎn)單,sql本身沒(méi)有什么優(yōu)化空間,就考慮了索引
修改索引結(jié)構(gòu),建立一個(gè)(user_id,picname,smallimg)的聯(lián)合索引:uid_pic
重新執(zhí)行10次,平均耗時(shí)降到了30ms左右
使用explain進(jìn)行分析
看到使用的索引變成了剛剛建立的聯(lián)合索引,并且Extra部分顯示使用了'Using Index'
總結(jié)
'Using Index'的意思是“覆蓋索引”,它是使上面sql性能提升的關(guān)鍵
一個(gè)包含查詢所需字段的索引稱為“覆蓋索引”
MySQL只需要通過(guò)索引就可以返回查詢所需要的數(shù)據(jù),而不必在查到索引之后進(jìn)行回表操作,減少IO,提高了效率
例如上面的sql,查詢條件是user_id,可以使用聯(lián)合索引,要查詢的字段是picname smallimg,這兩個(gè)字段也在聯(lián)合索引中,這就實(shí)現(xiàn)了“覆蓋索引”,可以根據(jù)這個(gè)聯(lián)合索引一次性完成查詢工作,所以提升了性能
相關(guān)文章
mysql unsigned 用法及相減出現(xiàn)補(bǔ)數(shù)溢出解決方法
unsigned表示無(wú)符號(hào)的意思,也就是非負(fù)數(shù),只用于整型并且unsigned 是MYSQL自定義的類型,非標(biāo)準(zhǔn)SQL。用途1是紅苕說(shuō)的起到約束數(shù)值的作用,2是可以增加數(shù)值范圍(相當(dāng)于把負(fù)數(shù)那部分加到正數(shù)上)。不過(guò)少用,不方便移植2012-04-04CentOS安裝mysql5.7 及簡(jiǎn)單配置教程詳解
這篇文章主要介紹了CentOS安裝mysql5.7 及簡(jiǎn)單配置教程詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02SQL刪除重復(fù)數(shù)據(jù)的實(shí)例教程
在使用SQL提數(shù)的時(shí)候,常會(huì)遇到表內(nèi)有重復(fù)值的時(shí)候,下面這篇文章主要給大家介紹了關(guān)于SQL刪除重復(fù)數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07通過(guò)緩存+SQL修改優(yōu)雅地優(yōu)化慢查詢
本文通過(guò)介紹緩存的基本原理和SQL語(yǔ)句的優(yōu)化手段,以及實(shí)際案例的分析,為讀者提供了一種簡(jiǎn)單而有效的優(yōu)化思路。讀者可以通過(guò)本文了解到如何在不修改程序代碼的情況下,通過(guò)巧妙地運(yùn)用緩存和SQL優(yōu)化技巧,提高程序的性能和響應(yīng)速度。2023-04-04mysql 獲取規(guī)定時(shí)間段內(nèi)的統(tǒng)計(jì)數(shù)據(jù)
這篇文章主要介紹了mysql 獲取規(guī)定時(shí)間段內(nèi)的統(tǒng)計(jì)數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2017-05-05