如果我有查询,
DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'
是否有datetime_field
列索引帮助?即,索引仅在使用相等(或不等式)测试时有用,或者在进行有序比较时是否有用?
(更好地执行此查询的建议,无需重新创建表格,也可以!)
答案 0 :(得分:11)
也许。通常,如果存在这样的索引,如果查询上没有“更好”的索引,它将对该索引使用范围扫描。但是,如果优化器决定范围最终会过大(即包括超过1/3的行),它可能根本不会使用索引,因为表扫描很可能是更快。
使用EXPLAIN(在SELECT上;你不能解析删除)来确定它在特定情况下的决定。这可能取决于
答案 1 :(得分:4)
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