是否索引<或者> MySQL查询?
时间:2020-03-06 14:39:04 来源:igfitidea点击:
如果我有类似的查询,
DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'
将" datetime_field"列编入索引有帮助吗?即索引仅在使用相等(或者不相等)测试时才有用,还是在进行有序比较时也有用?
(Suggestions for better executing this query, without recreating the table, would also be ok!)
解决方案
确实如此,用DESCRIBE SELECT FROM table检查...
datetime字段上的索引肯定会有助于基于日期范围的搜索。我们一直在数据库中使用它们,而没有索引的查询则非常慢。
可能是。通常,如果存在这样的索引,则在查询中没有"更好"的索引时,它将在该索引上使用范围扫描。但是,如果优化程序确定范围最终会变得太大(即包括多于1/3的行),则它可能根本不会使用索引,因为表扫描可能会快点。
使用EXPLAIN(在SELECT上;不能解释删除)来确定在特定情况下的决定。这可能取决于
- 表中有多少行
- 我们指定的范围是多少
- WHERE子句中还指定了其他内容。如果存在另一个"看起来更好"的索引,它将不会使用一个索引的范围扫描。
从MySQL参考手册中:
A B-tree index can be used for column comparisons in expressions that use the =, >, >=, <, <=, or BETWEEN operators.
对于大量的行,通过树索引查找行比通过表扫描查找行要快得多。但是正如其他答案所指出的那样,请使用" EXPLAIN"来找出MySQL的决定。