MySQL-03-索引

索引介绍

官方介绍索引是帮助MySQL高效获取数据的数据结构

  1. 优势:
    检索:可以提高数据检索的效率,降低数据库的IO成本;
    排序:被索引的列会自动进行排序,包括【单列索引】和【组合索引】,只是组合索引的排序要复杂一些,如果按照索引列的顺序进行排序,对应order by语句来说,效率就会提高很多;
    where 索引列在存储引擎层被处理,达到索引下推效果;
  2. 劣势: 占据磁盘空间; 索引虽然会提高查询效率,但是会降低更新表的效率;比如每次对表进行增删改操作,MySQL不仅要保存数据,还有保存或者更新对应的索引文件。

索引分类

  1. 单列索引
  2. 组合索引
  3. 全文索引(mysql支持差,es代替较多)
  4. 空间索引(5.7之后的版本)

索引原理

  1. B和B+的区别

    B树和B+树的最大区别在于非叶子节点是否存储数据的问题。
    B树是非叶子节点和叶子节点都会存储数据,查找数据需要遍历所有的节点;
    B+树只有叶子节点才会存储数据,而且存储的数据都是在一行上,默认排列好顺序(自左向右、从大到小),数据都有指针指向,也就是有顺序。所以B+TREE检索速度快;

  2. 非聚集索引(MyISAM) :索引与数据不在同一个文件中,在索引文件中找到地址,根据地址在数据文件中找到数据.
    (主键索引/非主键索引)下存储的都是数据的文件的地址值
    在这里插入图片描述

    主键索引在这里插入图片描述
    非主键索
    在这里插入图片描述

  3. 聚集索引(InnoDB) :索引与数据在同一个文件中,即在同一棵树上。
    主键索引 数据都存在叶子结点上
    在这里插入图片描述
    非主键索 叶子结点存的是主键
    在这里插入图片描述

回表问题

select * from t where name=‘Alice’ ,此语句查询的执行过程是:
① 没建立索引
遍历整张表来查找结果,即全表扫描;
② 给name做了索引:
1.非主键索引树:A开头在左边查找,会很快查找到’Alice’下的主键18,
2.主键索引树:查找主键为’18’下的所有内容(因为是select * ,所以要查找所有的数据)

解决回表问题

  1. 只查索引和主键字段
    select id,name from t where name=‘Alice’ 此语句不会产生回表,在一个树上完成查询,提升查询效率。(非主键索引树存着主键)
  2. 需要查询到个别字段进行索引覆盖 (建立组合索引)
    在一棵树上完成查询工作,在回表中举例的查询语句只能实现id,name查询不回表;利用组合索引,完成索引覆盖;将name和score做为组合索引:
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值