日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql datetime month不走索引_like百分号加前面一定不走索引吗?一不小心就翻车,关于mysql索引那些容易错的点...

發布時間:2023/12/10 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql datetime month不走索引_like百分号加前面一定不走索引吗?一不小心就翻车,关于mysql索引那些容易错的点... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

like百分號加前面一定不走索引嗎?

正常來講,我們都知道在mysql的like查詢中,百分號加在關鍵詞后面是走索引的,比如 select * like "張三%",而百分號在前面是不走索引的,比如 select * like "%張三",但也有例外。如果你的字段有id,a,b,c四列。而你對abc三列加了索引的話。那無論如何,like都會走索引的。因為如果能走覆蓋索引的話。mysql會優先走覆蓋索引。

同時,如果id,a,b,c四列,僅對a列做了索引,select a from table where a like "%張三%"也同樣是會走覆蓋索引的

like如果走了索引,或者范圍查詢后面的字段還走不走索引?

假設abc加了索引,select a from table where a like "張三%" and b = 18,那b走不走索引?不一定,根據索引的底層原理,a字段是確定值,b字段才會走索引。所以范圍查詢后面不走索引只是一個偷懶的說法。如果范圍查詢過后的a是個確定值,那后面還是走索引的,否則不走

abc創建了索引,where條件和索引順序不一致走不走索引?

abc創建了索引,select * from table where a = 1 and c = 3 and b = 2 走不走索引?走的,mysql底層會針對sql語句進行一定的優化。該sql幾個and的順序調整對最終結果的正確性沒有影響,但卻會走不走索引的查詢效率影響較大。sql很樂意做這樣的優化

or走不走索引?

我們經常會聽到or走索引,或者or不走索引的簡單說法,其實這里是分情況的
如果針對某個字段的or是走索引的,比如 select * from table where ( a = '3' or a = '4') ;
如果針對多個字段的or是不走索引的,比如 select * from table where ( a = '3' or b = 4) ;

排序走不走索引?

select * from table where a = '張三' and b = 18 order by c asc,排序字段c走不走索引?走的!
abc正好順序的出現在組合索引當中,但有個點要注意的是,如何知道排序走沒走索引。一般走沒走索引通過explain當中的key能看出來。但在剛才的sql中,由于a已經走了索引,c走不走索引無法通過key看出來,而只能通過extra中的信息來看,如果extra出現了filesort說明沒有用到索引。

引申一下,和c的場景類似,如果知道b走沒有索引。只能通過和單獨a條件,比較key_len來確定,如果b走了索引,key_len是會變長的。否則沒走

提防隱式轉換

有一種比較低級錯誤,比如我有個字段名a,保存內容為年齡,但是誤用了varchar字段,那 select a from table where a = 18,走不走索引?不走的,雖然mysql很智能,這個sql沒有報錯,但是mysql為此針對列a做了字符串到數字的轉換,我們都知道一旦針對某個字段做了函數轉換,那就不走索引了。再引申一下,索引失效以后 update table set b = 10086 where a = 18,由于索引失效,針對a的查詢需要全表掃描,針對a的修改又需要加寫鎖。所以本來的行級寫鎖變為了表級寫鎖。并發能力大大降低!

總結

以上是生活随笔為你收集整理的mysql datetime month不走索引_like百分号加前面一定不走索引吗?一不小心就翻车,关于mysql索引那些容易错的点...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。