Mysql筆記2--索引優(yōu)化

雙表

image.png

如果是左連接建立在左表的索引的話,可以換成右連接的查詢語(yǔ)句. ---即 保證不是全表的那個(gè)表建立索引即可.(左/右連接相反建)

三表/多表

image.png

*避免索引失效

image.png
image.png
image.png
image.png

帶頭大哥不能死,在staffs表中通過(guò)nameAgePos建立了索引, 而前兩次的查詢中,均沒(méi)有用到name,只用到了age和pos,因此索引會(huì)失效. 為避免失效,必須要用到帶頭的name!(火車頭)

image.png

中間兄弟不能斷,這里用到了索引,但是只是用到了name的索引,后面的pos索引沒(méi)用到,(根據(jù)key_len和ref只有一個(gè)const可知),違背了最佳左前綴法則的"不跳過(guò)索引中間的列"

image.png

百分(%)like加右邊

image.png

若非要在字符串兩邊都使用%,則可以通過(guò)覆蓋索引的方法來(lái)解決索引失效問(wèn)題.
即,建立的索引,最好和要查詢的字段字段,順序都一樣!(注:主鍵默認(rèn)使用index級(jí)別索引)

image.png

如果這里,name是varchar類型,如果 在查詢的時(shí)候 不使用單引號(hào),那么mysql會(huì)先以int類型去查找,如果查找不到結(jié)果,則會(huì)在底層隱式的將2000強(qiáng)轉(zhuǎn)為'2000'再去查詢,因此在這一過(guò)程中會(huì)消耗性能
(有計(jì)算過(guò)程也是會(huì)消耗性能)

image.png
image.png

口訣

參考

全值匹配我最愛(ài),最左前綴要遵守;
帶頭大哥不能死,中間兄弟不能斷;
索引列上無(wú)計(jì)算,范圍之后全失效;
like百分加右邊,覆蓋索引不寫星*
不等空值還有or,索引失效要少用;
字符串里有引號(hào),SQL高級(jí)也不難


image.png
image.png

建索引的時(shí)候按照c1,c2,c3,c4建,但是查詢的時(shí)候按照c4~c1查詢?nèi)匀挥玫搅怂饕?是因?yàn)樵贛ysql的服務(wù)層中有優(yōu)化器讓該語(yǔ)句按照索引查詢

image.png

范圍之后全失效--->是指mysql自動(dòng)調(diào)優(yōu)后的范圍,而不是按照寫的sql順序
即,這里在調(diào)優(yōu)后順序應(yīng)該是c1='a1',and c2='a2' and c3= 'a3' and c4 > 'a4' , 因?yàn)閏4是索引的最后一個(gè)值,索引范圍之后全失效的也不需要查了!

image.png
image.png
image.png
image.png

補(bǔ)充group by

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容