MySQL索引選擇問題(要相信MySQL本身選擇索引的能力)

1、問題:測試

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

     

 

有個表,表結構以下,這裏只截取一部分,但能夠說明問題:3d

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

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

 

2、測試過程:im

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

     數據量不算大,沒有選擇enter_day的緣由,猜想是由於二者的代價是同樣的,因此對於MySQL來講,二者沒區別。next

下面進行測試:數據

正常查詢,能夠看到Handler_read_next爲229804查詢

再查一次,能夠看到Handler_read_next仍是增長229804,即229804*2=459608

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

 

3、結論:

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

相關文章
相關標籤/搜索