是否有索引<;或>;MySQL查询?

是否有索引<;或>;MySQL查询?,mysql,optimization,indexing,Mysql,Optimization,Indexing,如果我有这样的疑问 DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00' 从datetime_字段所在的表中删除、>=、的表达式中的列比较,除非mysql中没有此缺陷也许这应该是一个额外的问题,但是否有一个简单的答案(或参考mysql文档的一部分)来解释优化器如何做出范围太大的决定?具体案例在WHERE中没有其他内容。

如果我有这样的疑问

DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'
从datetime_字段所在的表中删除<'2008-01-01 00:00:00'
datetime\u字段
列编入索引是否有帮助?i、 e.索引是否仅在使用相等(或不相等)测试时有用,还是在进行有序比较时也有用

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


确实如此,请使用“描述从表中选择…”进行检查。

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

可能吧。通常,如果有这样一个索引,如果查询中没有“更好”的索引,它将对该索引使用范围扫描。但是,如果优化者认为范围太大(即包含超过,比如1/3行),则可能根本不会使用索引,因为表扫描可能会更快

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

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


B-树索引可用于使用=、>、>=、的表达式中的列比较,除非mysql中没有此缺陷

也许这应该是一个额外的问题,但是否有一个简单的答案(或参考mysql文档的一部分)来解释优化器如何做出范围太大的决定?具体案例在WHERE中没有其他内容。