加入收藏 | 设为首页 | 会员中心 | 我要投稿 草根网 (https://www.1asp.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Mysql回表与索引覆盖,联合索引问题

发布时间:2022-11-25 13:03:08 所属栏目:教程 来源:
导读:  一、Mysql为什么可以存储海量数据?

  1.使用B+引擎,可以减少IO请求mysql数据表,使用的B+树,为N叉树,与普通的二叉树比较起来,高度跟低

  2.查询效率稳定,每次都从根节点到叶子节点,叶子节点只
  一、Mysql为什么可以存储海量数据?
 
  1.使用B+引擎,可以减少IO请求mysql数据表,使用的B+树,为N叉树,与普通的二叉树比较起来,高度跟低
 
  2.查询效率稳定,每次都从根节点到叶子节点,叶子节点只存储数据
 
  3.叶子节点为双向循环链表,且按照关键字大小进行排列,可以有效的进行范围查询,hash索引在等值查询上效率高。
 
  二、InnoDB与聚簇索引
 
  聚簇索引:数据与索引存放在一起,找到了索引就找到了数据
 
  InnoDB:底层由B+树实现,每个节点对应innodb的一个page,page的大小固定为16K,同一页可以有多条数据,也就是说访问数据时候,已经把页page加载到buffer中,直接在内存中查询,不必再访问磁盘。
 
  优点:
 
  1.使用经常更新的表,适合崇礼并发更新请求
 
  2.支持事务
 
  3.有binlog容灾日志
 
  4.支持外键约束
 
  5.支持行级锁
 
  三、Myisam与非聚簇索引
 
  非聚簇索引:索引与数据不存放在一起,需要先将索引缓存到内存中去在找数据
 
  myisam:mysql的默认存储引擎,读操作效率高,写效率低。
 
  优缺点:
 
  1.不支持事务,外键
 
  2.只有表级锁
 
  3.写效率低下
 
  四、回表与索引覆盖
 
  辅助索引,主键索引B+
 
  回表:访问两次索引才能查询到数据【效率低下】
 
  索引覆盖:表中的全部字段都是索引列的时候,会产生索引覆盖;解决回表问题,using index 【效率高】
 
  例如:
 
  select id, name from table where name = 'xxxx';
  会先根据name的值,在name B+树上查找叶子节点
 
  再去根据id获取id B+树上的所有数据
 
  五、联合索引
 
  1.当表中的全部字段都是索引列的时候,会产生索引覆盖。
 
  2.通过索引就可以返回查询所需要的数据,这样避免了查到索引后再返回表操作,减少I/O提高效率。
 
  3.此时,最左侧匹配原则可能会失败
 
  覆盖索引失败原因:
 
  1.select选择的字段中含有不在索引中的字段 ,即索引没有覆盖全部的列。
 
  2.where条件中不能含有对索引进行like的操作。
 

(编辑:草根网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章