代码之家  ›  专栏  ›  技术社区  ›  Martin Rázus

mysql范围索引

  •  0
  • Martin Rázus  · 技术社区  · 16 年前

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

    在第1列上设置了索引,在解释了使用的是索引后,看起来一切正常。

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

    未使用索引,选择“通过所有记录运行”。我做错什么了吗?谢谢

    1 回复  |  直到 16 年前
        1
  •  2
  •   James Anderson    16 年前

    MySql认为表中有多少行?

    Mysql通常(通常是正确的!)认为对行进行顺序扫描会更快,而不是通过索引进行更复杂的访问。

    也就是说,如果优化者希望选择超过30%的行,它将顺序扫描整个表,因为这通常比通过索引进行大量直接访问要快。