糾正大家對 in 用法的誤解

╰ゝSakura發表於2022-11-04

背景:群內某小夥伴說 in 走不走索引是跟in裡面的字串多少有關係,超過多少字串長度後,就不會走索引。

實際上,這種認知是錯誤的, 大家都被不少轉載的文章給欺騙了!!!:broken_heart:

真正影響 in 走不走索引的取決於 in 裡面符合條件的資料佔比多少,從而影響 mysql 是否走索引!
之前我測試是符合in的資料超過40%(這個閥值不一定是40%,只是之前本人測試是40%左右會不走索引,這個也受mysql版本影響)之後,就開始走全表,不走索引

實踐:

圖1:
糾正大家對 in 用法的誤解

圖2:
糾正大家對 in 用法的誤解

圖3:
糾正大家對 in 用法的誤解

圖4:
糾正大家對 in 用法的誤解

圖5:
糾正大家對 in 用法的誤解

如上圖所示,當不考慮回表影響、覆蓋索引的情況下,in中符合資料佔整表資料較多的時候,會開始走全表掃描,不走索引。
另外特別說明
1.當 in 單個值的時候,mysql會自動最佳化為 = ,故還是會走索引
2.當 in 和 select 的列為同個的時候,由於不需要走回表的情況下,會走覆蓋索引

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章