zoukankan      html  css  js  c++  java
  • mysql索引覆盖之innodb和myisam效率问题

    问题:

    create table A ( 
       id varchar(64) primary key, 
       ver int, 
       ... 

    我的表有几个很长的字段varchar(3000) 
    在id、ver上有联合索引 

    10000条数据 
      
    为什么select id from A order by id特别慢,
    而select id from A order by id,ver非常快 ?

    解析:

    1.两条sql都使用了索引覆盖。

    2.myisam存储引擎,数据行和索引节点分开存放,所以不会存在上述问题。

    3.innodb存储引擎,由于数据行和主键索引节点一起存放(聚簇索引),主键索引文件会比较大,

     当只按id排序读取id时,则会遍历主键索引B-TREE去读取id,由于表中的记录行有几个大字段的数据,读取时I/O跳跃会比较大,所以会特别慢;

     而根据符合索引(id,ver)排序查询时,则使用innodb的辅助索引,索引节点只存储了索引数据和主键的地址,而且使用了索引覆盖,只需从索引中读取id即可,所以会非常快。

  • 相关阅读:
    CSS三大特性
    CSS选择器
    CSS(1)
    多媒体标签
    快捷键
    H5注意点(2)
    H5注意点(1)
    List详解
    求最大子串和以及其中一个子串(java)
    隧道项目
  • 原文地址:https://www.cnblogs.com/lpfuture/p/5756653.html
Copyright © 2011-2022 走看看