Mysql: 強制走索引:mysql between 日期索引 索引問題-日期索引使用


Mysql: mysql between 日期索引 索引問題-日期索引使用

表結構:

dep_date 

dep

arr

聯合索引: ind_coll_date_route  (dep_date ,dep,arr)

這兩天發現原來的查詢效率慢了,使用explain 查看,居然沒有使用索引, 
我的索引是日期類型的,首先想到的是mysql對日期類型的索引的處理機制是不是不同,在where條件里試了幾種,發現效果都差不多,

where dep_date >= ‘20161121’ 
where dep_date  >= ‘2016-11-21’ 
where dep_date  between ‘2016-11-01’ and ‘2016-11-21’

還有各種函數,最后發現結論都是一樣的,在baidu上查詢也沒有有價值的內容。

最后發現了一些規律,但不知道是否有普遍性,即:

在查詢數據條數約占總條數五分之一以下時能夠使用到索引,但超過五分之一時,則使用全表掃描了。

試了多張表,均是這個結論, 所以想這個五分之一應該是在某一個地方設置的,或者是系統默認在查詢優化時的一個經驗值,在以后的處理的進修引起注意。

 

解決辦法:

強制走索引

SELECT * 
FROM  `table_xxx` 
FORCE INDEX ( ind_coll_date_route ) 
WHERE 
dep_date BETWEEN '2017-12-01' AND '2017-12-30'

  

雖然走了強制索引,但實際上依然很慢。這主要還是數據量大或者並沒有真正走到索引上。

當數據量大,這樣的聯合索引:ind_coll_date_route  (dep_date ,dep,arr) 日期就走的很慢,經過多少發現這是mysql的一個bug,

后將聯合索引改成:ind_coll_date_route  (dep,arr,dep_date)  ,速度快了很多,並且也走了索引。

 


免責聲明!

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



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