首页 LNMP Mysql 正文

Mysql 聚簇索排序慢案例分析

金鹏头像 金鹏 Mysql 2021-12-03 10:12:14 0 716
导读:网上看到有一个有趣的现象,一个有1W数据量的表,执行不同的orderby条件,查询时间非常大,这个是实际应用中确实出现的问题??为什么呢?二.分析  a).情况...

网上看到有一个有趣的现象,一个有1W数据量的表,执行不同的orderby条件,查询时间非常大,这个是实际应用中确实出现的问题??为什么呢?

图片.png


二.分析
 
 a).情况描述:

       1.有主键id,联合索引(id,ver);用前者当orderby查询慢,用后者orderby查询会很快;
       2.每一行的数据量挺大
       3.id为主索引,而select查询的字段也仅仅有id,那么不就是
      索引覆盖了呗,不用到物理磁盘回行数据,在索引上就能拿到要的数据了,但本应该查询更快的却慢了。
      
      Mysql-索引覆盖
 
 b).分析:
       肯定用的不是mysiam引擎,若是的话用这两个索引查询,其实速度是差不多的,因为索引上存的都是一个物理行的地址嘛,实际占有的数据量又不大。但如果是innodb就不一样了,它的主索引下边可是拖家带口存放着该行的所有数据的。
     

 
 c).结论:

      1.主因:用的innodb引擎是聚簇索引,主键ID索引还下拖家带口的挂着该行的其他数据,导致沿着ID排序时,要跨过好多小块才能查询遍历每个ID;(而mysiam下头没那么多数据,跨过相同的数据块会更快,遍历更多的行)
       2.从因:有几个字段下的数据量比较大,即拖家带口带的人还比较多,数据量比较大。每行数据量大,在磁盘存储时占用的块儿也多
       3. 当时mysiam引擎时不存在这个问题

本文地址:https://www.jinpeng.work/?id=18
若非特殊说明,文章均属本站原创,转载请注明原链接。
广告3

欢迎 发表评论:

  • 请填写验证码

日历

«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930

控制面板

您好,欢迎到访网站!
  查看权限
广告2

退出请按Esc键