我有一个表 ask 字段id ,name category,
id是主键,category 创建了索引,
使用explain select * from ask where category in (75,774)分析 ,
当等于75记录小于3条的时候,type是 range.
1, 'SIMPLE', 'ask', 'range', 'askcategory', 'askcategory', '5', '', 3, 'Using where'
如果大于3条的时候type 就是all,这是为什么啊
1, 'SIMPLE', 'ask', 'ALL', 'askcategory', '', '', '', 17, 'Using where'
这是为什么啊
问题补充
扫描索引没直接扫数据块。。所以mysql就选择了不扫描索引。。。
不明白你的意思,那为什么2条时候用了索引,3条就不用索引了
问题补充
如果明白先查索引,再获取数据,和直接查数据的区别,就不难理解为什么不用索引也会比使用快。。
手册里说的:
7.2.15. 如何避免表扫描
EXPLAIN的输出显示了当MySQL使用表扫描来解决查询时使用的所有类型列。这通常在如下条件下发生:
· 表很小,扫描表比查找关键字速度快。这对于少于10行并且行较短的表比较普遍。
有点明白了,就是当记录少的时候,全表扫描可以比索引查找会更快一些,所以采用全表扫描!