没有索引!=?

Dav*_*542 7 mysql sql performance database-performance

考虑以下两个EXPLAIN:

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
Run Code Online (Sandbox Code Playgroud)

而且 -

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 
Run Code Online (Sandbox Code Playgroud)

为什么!=查询有NULL密钥?它为什么不用title?是什么导致=语句能够利用索引而不是!=

Pau*_*aul 11

还有是在使用了索引,除非没有一点title正是'The'非常频繁.

由于几乎每行都需要选择,因此您无法获得使用索引的任何内容.使用索引实际上可能成本很高,这可能是您的MySQL引擎正在确定的,因此它选择不使用索引.

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

使用索引:

1)将整个索引树读入内存.
2)在索引树中搜索值"The"并过滤掉这些条目.
3)读取每一行,除了少数异常(可能在磁盘上的相同块中,需要读取的行,因此实际上整个表可能被读入)从表到内存.

没有索引:

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