fdsafds 2009-09-18 23:49
浏览 190
已采纳

mysql 索引 疑问

我有一个表 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'

这是为什么啊


问题补充

willko 写道
你整张表才17条记录。。。。
扫描索引没直接扫数据块。。所以mysql就选择了不扫描索引。。。

不明白你的意思,那为什么2条时候用了索引,3条就不用索引了
问题补充
willko 写道

如果明白先查索引,再获取数据,和直接查数据的区别,就不难理解为什么不用索引也会比使用快。。

手册里说的:

7.2.15. 如何避免表扫描



EXPLAIN的输出显示了当MySQL使用表扫描来解决查询时使用的所有类型列。这通常在如下条件下发生:

·         表很小,扫描表比查找关键字速度快。这对于少于10行并且行较短的表比较普遍。


有点明白了,就是当记录少的时候,全表扫描可以比索引查找会更快一些,所以采用全表扫描!
  • 写回答

2条回答 默认 最新

  • williams2222 2009-09-18 23:49
    关注

    如果明白先查索引,再获取数据,和直接查数据的区别,就不难理解为什么不用索引也会比使用快。。

    手册里说的:

    7.2.15. 如何避免表扫描

    EXPLAIN的输出显示了当MySQL使用表扫描来解决查询时使用的所有类型列。这通常在如下条件下发生:

    ·         表很小,扫描表比查找关键字速度快。这对于少于10行并且行较短的表比较普遍。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制