索引<或者> MySQL查询?

时间:2008-09-24 09:21:55

标签: mysql optimization indexing

如果我有查询,

DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'

是否有datetime_field列索引帮助?即,索引仅在使用相等(或不等式)测试时有用,或者在进行有序比较时是否有用?

  

(更好地执行此查询的建议,无需重新创建表格,也可以!)

5 个答案:

答案 0 :(得分:11)

也许。通常,如果存在这样的索引,如果查询上没有“更好”的索引,它将对该索引使用范围扫描。但是,如果优化器决定范围最终会过大(即包括超过1/3的行),它可能根本不会使用索引,因为表扫描很可能是更快。

使用EXPLAIN(在SELECT上;你不能解析删除)来确定它在特定情况下的决定。这可能取决于

  • 表格中有多少行
  • 您指定的范围是什么
  • WHERE子句中指定了什么。如果有另一个“看起来更好”的索引,它将不会使用一个索引的范围扫描。

答案 1 :(得分:4)

来自MySQL Reference manual

  

B树索引可用于使用=,&gt;,&gt; =,&lt;,&lt; =或BETWEEN运算符的表达式中的列比较。

对于大量行,通过树索引查找行比通过表扫描查找行要快得多。但正如其他答案所指出的那样,使用EXPLAIN来找出MySQL的决定。

答案 2 :(得分:2)

日期时间字段上的索引肯定有助于基于日期范围的搜索。我们一直在数据库中使用它们,并且在没有索引的情况下查询速度非常慢。

答案 3 :(得分:1)

确实如此,请使用DESCRIBE SELECT FROM table ...

进行检查

答案 4 :(得分:0)

除了你在mysql http://bugs.mysql.com/bug.php?id=58190

中没有这个bug