请问 mysql explain type 里的 range 算不算是走了索引?

2018-10-16 16:08:12 +08:00
 cc959798

如题,还有就是 all 和 index 都算是全表扫描吗? index 的算走索引吗

6344 次点击
所在节点    MySQL
9 条回复
ppyybb
2018-10-16 18:34:07 +08:00
走了,文档说的很清楚了。
all/index 都是全表扫描。
ppyybb
2018-10-16 18:34:44 +08:00
但是 index 走了索引的全表扫描,算不算看你自己怎么定义了
BBCCBB
2018-10-16 18:36:49 +08:00
all > index > range , 一般来说, range 比 index 还好点. 今天刚看到的
cc959798
2018-10-16 20:05:00 +08:00
@BBCCBB 效率方面我清楚,range 这个如果范围比较大的话,走索引感觉也没有太大的意义,毕竟要走很多次索引
cc959798
2018-10-16 20:07:30 +08:00
@ppyybb 不太明白按 index 这种按索引扫描全表,感觉按索引的顺序和直接扫描性能应该是一样的,相当于一副打乱的扑克顺序查一下和按大小顺序查一下,感觉 index 应该更慢呀
jybox
2018-10-16 20:14:50 +08:00
「按索引扫全表」和「直接扫全表」比起来,在于按索引扫描是有顺序的,如果你的查询刚好在索引的字段上有排序( ORDER BY ),那么用了索引的话就不需要在内存中排序了。
jybox
2018-10-16 20:15:45 +08:00
不对,MySQL 好像是用磁盘排序( filesort ),那就更慢了
mineqiqi
2018-10-17 10:17:56 +08:00
走了,看下 rows 数量级
ppyybb
2018-10-17 13:29:12 +08:00
@cc959798 当然有区别,索引的 row 上面的数据比起聚集索引的数据要少得多,这样缓存里面的每一个 page 能存更多的行。

你如果考虑全在内存里面差距估计不大,但是从磁盘读就有差距了。当然要考虑最后 innodb 还要回表进行二次查询的开销,这个优化器会进行一定的评估来判断到底走 index 扫描划算不划算,explain 的未必就是最后的真正执行结果。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/498159

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX