我有一个表 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'
这是为什么啊
问题补充
如果明白先查索引,再获取数据,和直接查数据的区别,就不难理解为什么不用索引也会比使用快。。
手册里说的:
EXPLAIN的输出显示了当MySQL使用表扫描来解决查询时使用的所有类型列。这通常在如下条件下发生:
· 表很小,扫描表比查找关键字速度快。这对于少于10行并且行较短的表比较普遍。
如果明白先查索引,再获取数据,和直接查数据的区别,就不难理解为什么不用索引也会比使用快。。
手册里说的:
EXPLAIN的输出显示了当MySQL使用表扫描来解决查询时使用的所有类型列。这通常在如下条件下发生:
· 表很小,扫描表比查找关键字速度快。这对于少于10行并且行较短的表比较普遍。
你整张表才17条记录。。。。
扫描索引没直接扫数据块。。所以mysql就选择了不扫描索引。。。