關于 MySQL 單表查詢時 in 不走索引問題
什么是 in 查詢語句
in 查詢語句指的是查詢某一字段的多個值,常常被用來代替多個 or 查詢。比如:select * from table where id in(1,2,3,4)
為什么 in 查詢語句容易不走索引
in 查詢語句在查詢的過程中,需要掃描全表,判斷每條記錄是否符合 in 中的要求。由于 in 查詢語句通常會將多個值放到一個括號中,因此其實就相當于多個 or 查詢。MySQL 對多個 or 查詢的優化不如單個 or 查詢,因此查詢速度也較慢,容易導致不走索引。
如何優化 in 查詢語句
1.盡量減少 in 查詢中的值,在絕大多數情況下,in 語句只需要查詢一兩個值即可。有時候,可以將 in 查詢分成多個等值查詢,這樣可以避免 in 查詢走全表掃描。
2.添加合適的索引,尤其是在經常用到的字段上添加索引可以加速 in 查詢。
3.考慮將 in 查詢語句改為 exists 查詢語句,exists 的效率一般比 in 高,因為 exists 只要找到一條符合條件的記錄后就返回結果。