如果我有一个的查询等,

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

不会有的 datetime_field 列索引帮助吗?即是指只有当使用的平等(或不平等的)试验,或者是有用的,当做一个有序的比较吗?

(建议,为更好地执行这种查询,而无需重新表,也将确定!)

有帮助吗?

解决方案

也许。在一般情况下,如果有这样一个指数,它将使用一个范围扫描上的索引,如果是没有"好的"索引,查询。然而,如果优化决定的范围最终会被太大(即包括更多的比说的1/3行),它可能不会使用的指数,作为一个表格的扫描将有可能更快。

使用解释(在选择;你不能解释删除),确定其决定在特定情况。这很可能取决于

  • 多少行有表
  • 什么样的范围是你的指定
  • 还有什么是在指定其中的条款。它不使用一个范围扫描的一个指标如果有另一个指标,"看起来更好"。

其他提示

来自 MySQL参考手册

  

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

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

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

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

进行检查
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top