10

如果我有类似的查询,

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

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

(在不重新创建表的情况下更好地执行此查询的建议也可以!)

4

5 回答 5

11

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

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

  • 表中有多少行
  • 您指定的范围是多少
  • WHERE 子句中还指定了什么。如果有另一个“看起来更好”的索引,它不会使用一个索引的范围扫描。
于 2008-09-24T09:33:08.600 回答
4

来自MySQL 参考手册

B 树索引可用于使用 =、>、>=、<、<= 或 BETWEEN 运算符的表达式中的列比较。

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

于 2008-09-24T10:51:07.790 回答
2

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

于 2008-09-24T09:25:46.653 回答
1

确实如此,请检查 DESCRIBE SELECT FROM 表...

于 2008-09-24T09:23:40.557 回答
0

除非你在 mysql http://bugs.mysql.com/bug.php?id=58190中没有这个错误

于 2014-02-26T11:02:10.983 回答