索引<或> MySQL查询?

Ton*_*yer 10 mysql indexing optimization

如果我有一个查询,

DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*rkR 11

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

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

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

  • 也许这应该是一个额外的问题,但有一个简单的答案(或参考MySQL文档的一部分),解释了优化者如何决定范围太大?具体情况在WHERE中没有别的. (2认同)