所以我有这个表包含 100000 行
field1 field2
现在我刚刚添加了一个新列 field3 并且在 field3 上有一个索引
field1 field2 field3
所以我添加了大约 50 行包含 field3(其他行的 field3 为 NULL)
所以我做了一个选择
SELECT * FROM table WHERE field3 IN (val1, val2);
对此的解释是相当理智的。它使用 field3 上的索引并且只扫描 2 行
但是,当我在 IN 语句中添加更多值时
SELECT * FROM table WHERE field3 IN (val1, val2, val3, val4, val5, val6, val7, val8, val9, val10);
这最终导致不使用索引并最终对整个 100000+ 行执行全表扫描。
为什么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知道 mysql
但这不可能比使用索引获取这 10 个值更快
为什么mysql会这样做,我如何指示mysql强制他们使用索引而不是执行全表扫描......