首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
宝塔
V2EX  ›  MySQL

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

  •  
  •   cc959798 · 2018-10-16 16:08:12 +08:00 · 2082 次点击
    这是一个创建于 398 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    你如果考虑全在内存里面差距估计不大,但是从磁盘读就有差距了。当然要考虑最后 innodb 还要回表进行二次查询的开销,这个优化器会进行一定的评估来判断到底走 index 扫描划算不划算,explain 的未必就是最后的真正执行结果。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   893 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 21:04 · PVG 05:04 · LAX 13:04 · JFK 16:04
    ♥ Do have faith in what you're doing.