MySQL索引選擇問題(要相信MySQL自己選擇索引的能力)


一、問題:

     如下的一個查詢,按常理,應該會選擇enter_day,但優化器選擇的是:d_index。這是否是優化器選擇錯誤,其實不一定,兩者的成本是一樣的,請看測試。

     

 

有個表,表結構如下,這里只截取一部分,但可以說明問題:

enter_day的定義是:`enter_day` int(11) NOT NULL DEFAULT '0' COMMENT '進入日期(整型)',

共有4個索引,包含這個列

 

二、測試過程:

     看看這個表的數據量:2314234。大小3.5G。MySQL 版本是 5.5.24

     數據量不算大,沒有選擇enter_day的原因,猜測是因為兩者的代價是一樣的,所以對於MySQL來說,兩者沒區別。

下面進行測試:

正常查詢,可以看到Handler_read_next為229804

再查一次,可以看到Handler_read_next還是增加229804,即229804*2=459608

那下面指定強制索引,再做一次測試,發現Handler_read_next也是229804(689412-459608=229804)。說明代價還真的是一樣的。

 

三、結論:

     選擇哪個索引,對於MySQL來說,成本是一樣的,無所謂對錯,所以默認選擇d_index,不算是錯誤。


免責聲明!

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



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