背景:群內(nèi)某小伙伴說 in 走不走索引是跟 in 里面的字符串多少有關(guān)系,超過多少字符串長度后,就不會(huì)走索引。
實(shí)際上,這種認(rèn)知是錯(cuò)誤的, 大家都被不少轉(zhuǎn)載的文章給欺騙了?。。?/p>
真正影響 in 走不走索引的取決于 in 里面符合條件的數(shù)據(jù)占比多少,從而影響 mysql 是否走索引!
之前我測試是符合 in 的數(shù)據(jù)超過 40%(這個(gè)閥值不一定是 40%,只是之前本人測試是 40% 左右會(huì)不走索引,這個(gè)也受 mysql 版本影響)之后,就開始走全表,不走索引
實(shí)踐:
圖 1:
程序員必備接口測試調(diào)試工具:立即使用
Apipost = Postman + Swagger + Mock + Jmeter
Api設(shè)計(jì)、調(diào)試、文檔、自動(dòng)化測試工具
后端、前端、測試,同時(shí)在線協(xié)作,內(nèi)容實(shí)時(shí)同步
圖 2:
圖 3:
圖 4:
圖 5:
如上圖所示,當(dāng)不考慮回表影響、覆蓋索引的情況下,in 中符合數(shù)據(jù)占整表數(shù)據(jù)較多的時(shí)候,會(huì)開始走全表掃描,不走索引。
另外特別說明
1. 當(dāng) in 單個(gè)值的時(shí)候,mysql 會(huì)自動(dòng)優(yōu)化為 = ,故還是會(huì)走索引
2. 當(dāng) in 和 select 的列為同個(gè)的時(shí)候,由于不需要走回表的情況下,會(huì)走覆蓋索引
推薦學(xué)習(xí):《MySQL視頻教程》