,所以我有這個表containt 100000行MySQL的執行全表掃描,即使存在索引
field1 field2
現在我只是增加了一個新的列字段3,而且存在於場3
field1 field2 field3
指數所以我添加了大約50行,其中包含field3(其他行的field3爲NULL)
所以我做了一個選擇
SELECT * FROM table WHERE field3 IN (val1, val2);
對此的解釋相當理智。它使用的字段3索引和僅掃描2行
然而,正如我在陳述
SELECT * FROM table WHERE field3 IN (val1, val2, val3, val4, val5, val6, val7, val8, val9, val10);
這結束了不使用索引添加更多的價值,並最終執行整個的全表掃描100000+行。
爲什麼mysql在做這個?我知道,MySQL的"If you need to access most of the rows, it is faster to read sequentially, because this minimizes disk seeks."
從http://dev.mysql.com/doc/refman/5.1/en/mysql-indexes.html
但這不可能是不是使用索引取的10個值
爲什麼mysql的這樣快,我怎麼能指示MySQL迫使他們使用索引而不是執行全表掃描...
哪個存儲引擎(InnoDB,MyISAM還是?)。很可能,MySQL對索引基數的估計與您預期的不同。統計數據由MyISAM和InnoDB處理。 [** myisam-index-statistics **](http://dev.mysql.com/doc/refman/5.5/en/myisam-index-statistics.html)[** innodb-statistics-estimate.html ** ](http://dev.mysql.com/doc/refman/5.5/en/innodb-statistics-estimation.html)優化器可以受**語句中包含的**提示** ** **索引提示** ](http://dev.mysql.com/doc/refman/5.5/en/index-hints.html)。 – spencer7593 2014-10-31 18:58:28
我正在使用InnoDB – pillarOfLight 2014-10-31 19:07:35