如果我有一个查询一样,是否索引< or > MySQL查询?
DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'
不具有datetime_field
列索引的帮助?即索引仅在使用相等(或不等)测试时有用,还是在进行有序比较时也很有用?
(建议更好地执行这个查询,而无需重新创建表,也将是确定!)
如果我有一个查询一样,是否索引< or > MySQL查询?
DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'
不具有datetime_field
列索引的帮助?即索引仅在使用相等(或不等)测试时有用,还是在进行有序比较时也很有用?
(建议更好地执行这个查询,而无需重新创建表,也将是确定!)
也许吧。一般来说,如果存在这样的索引,如果查询中没有“更好”的索引,它将使用该索引上的范围扫描。但是,如果优化器决定范围最终会变得太大(即包括超过1/3的行),则它可能根本不会使用该索引,因为表扫描可能是更快。
使用EXPLAIN(在SELECT上;你不能解释删除)来确定它在特定情况下的决定。这可能取决于
它,请与一个DESCRIBE SELECT FROM表...
索引在日期时间字段肯定会帮助基于日期范围的搜索。我们一直在我们的数据库中使用它们,并且查询速度很慢,没有索引。
A B树索引可以在使用表达式中使用列比较的=,>,> =,<,< =,或BETWEEN运算符。
对于大量的行,通过树索引查找行比通过表扫描快得多。但正如其他答案指出的那样,请使用EXPLAIN
来找出MySQL的决定。
除非你没有在MySQL这个bug http://bugs.mysql.com/bug.php?id=58190
或许,这应该是一个额外的问题,但有一个简单的答案(或参照MySQL文档的一部分),说明优化器是如何做出决定关于范围太大?特定情况在WHERE中没有别的。 – 2008-09-24 09:36:31