mysql范围索引

时间:2008-12-15 10:59:21

标签: mysql optimization

我的选择非常简单:

SELECT * FROM table 
  WHERE column1 IN (5, 20, 30);
在column1上的

是seated index,在解释查询是使用的索引之后,所有看起来都没问题。

但如果范围内有三个以上的值,请执行以下操作:

  SELECT * FROM table 
      WHERE column1 IN (5, 20, 30, 40);
不使用

索引,并选择通过所有记录运行。难道我做错了什么?感谢

1 个答案:

答案 0 :(得分:2)

MySql认为表中有多少行?

Mysql经常(通常是正确的!)假设对行进行顺序扫描会更快,而不是通过索引来处理更复杂的访问。

它从DBMS到DBMS不等,但权衡点大约是行的30%。

IE。如果优化器期望选择超过30%的行,它将按顺序扫描整个表,因为这通常比通过索引进行大量直接访问更快。