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'
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |