MySQL中使用IN查詢到底走不走索引


一、看數據量

EXPLAIN
SELECT * from users WHERE is_doctor in (0,1);

 

 很明顯沒走索引,下面再看一個sql。

EXPLAIN
SELECT * from users WHERE is_doctor in (2,1);

 

 又走索引了,所以IN查詢走不走索引需要看rows的數據量,in (0,1)時查詢出52萬多數據量,全表才54萬數據量,in (2,1)時只有1萬多數據量。

EXPLAIN
SELECT * from users WHERE (is_doctor=0 or is_doctor=1);

EXPLAIN
SELECT * from users WHERE (is_doctor=2 or is_doctor=1);

也是同樣的道理

總結

IN通常是走索引的,當IN后面的數據在數據表中超過30%的匹配時是全表掃描,不走索引,因此IN走不走索引和后面的數據量有關系。

二、看IN后面是不是有子查詢

EXPLAIN
SELECT * from users WHERE is_doctor in (SELECT is_doctor from test_in_subselect);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM