7

考虑以下两个解释:

EXPLAIN SELECT * FROM sales WHERE title != 'The'

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE      sales   ALL      title        NULL  NULL    NULL    41707   Using where

和 -

EXPLAIN SELECT * FROM sales WHERE title = 'The'
id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE      sales   ref      title         title    767 const   1   Using where 

为什么!=查询有NULL键?为什么不使用title?是什么导致=语句能够使用索引但不能使用!=

4

1 回答 1

10

除非非常频繁,否则使用索引是没有意义的title'The'

由于几乎每一行都需要被选中,因此您不会从使用索引中获得任何收益。使用索引实际上可能会很昂贵,这可能是您的 MySQL 引擎正在确定的,因此它选择不使用索引。

比较在这两种情况下完成的工作量:

使用索引:

1) 将整个索引树读入内存。
2) 在索引树中搜索值“The”并过滤掉这些条目。
3)从表中读取除少数例外(可能与需要读取的行在磁盘上的相同块中,因此很可能读入整个表)之外的每一行到内存中。

没有索引:

1) 将每一行读入内存,并在读取它们时从结果集中过滤掉任何 where title='The'

于 2012-06-12T00:24:02.170 回答