如果我有类似的查询,
DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'
datetime_field
列索引有帮助吗?即索引仅在使用相等(或不等)测试时有用,还是在进行有序比较时也有用?
(在不重新创建表的情况下更好地执行此查询的建议也可以!)
如果我有类似的查询,
DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'
datetime_field
列索引有帮助吗?即索引仅在使用相等(或不等)测试时有用,还是在进行有序比较时也有用?
(在不重新创建表的情况下更好地执行此查询的建议也可以!)
也许。一般来说,如果有这样的索引,如果查询上没有“更好”的索引,它将对该索引使用范围扫描。但是,如果优化器认为范围最终会太大(即包括超过 1/3 的行),它可能根本不会使用索引,因为表扫描可能会快点。
使用 EXPLAIN(在 SELECT 上;您不能 EXPLAIN 删除)来确定其在特定情况下的决定。这可能取决于
来自MySQL 参考手册:
B 树索引可用于使用 =、>、>=、<、<= 或 BETWEEN 运算符的表达式中的列比较。
对于大量行,通过树索引查找行比通过表扫描查找行要快得多。但正如其他答案所指出的,请使用EXPLAIN
找出 MySQL 的决定。
日期时间字段上的索引肯定有助于基于日期范围的搜索。我们一直在我们的数据库中使用它们,如果没有索引,查询速度非常慢。
确实如此,请检查 DESCRIBE SELECT FROM 表...