我的选择非常简单:
SELECT * FROM table
WHERE column1 IN (5, 20, 30);
在column1上的是seated index,在解释查询是使用的索引之后,所有看起来都没问题。
但如果范围内有三个以上的值,请执行以下操作:
SELECT * FROM table
WHERE column1 IN (5, 20, 30, 40);
不使用索引,并选择通过所有记录运行。难道我做错了什么?感谢
答案 0 :(得分:2)
MySql认为表中有多少行?
Mysql经常(通常是正确的!)假设对行进行顺序扫描会更快,而不是通过索引来处理更复杂的访问。
它从DBMS到DBMS不等,但权衡点大约是行的30%。
IE。如果优化器期望选择超过30%的行,它将按顺序扫描整个表,因为这通常比通过索引进行大量直接访问更快。