每日三思20200830

前言

主要是分享讨论一些有意思的问题,也可以用这个当做MySQL知识体系的自查表

问题项

  1. 重建索引的原因,优点和方式?
  2. 什么是覆盖索引?覆盖索引的优点?
  3. 什么是联合索引? 联合索引的使用场景?
会飞的大象
讨论数量: 2

1.索引是b++树,在增删过程中会出现较多的页分裂,数据空洞比较多,重建索引可以减小索引文件大小,提高查询效率 2.覆盖索引就是查询的数据都在辅助索引上获取,不需要回表查询主键索引来获取字段信息 3.联合索引 索引保存的数据可以有多个字段的值,并且按照字段顺序排列,当同时多个搜索条件可以用联合索引,

3年前 评论

自答:

问题1:

  • 原因:在插入数据时,数据页满,从而导致页分裂。进行删除操作的时候删除的空间(标记删除)没有重用,导致 索引出现碎片。
  • 优点:
    • 使用索引扫描的查询扫描的物理索引块会减少,从而提高效率
    • 需要缓存的索引块减少了,从而让出了内存以供其他组件使用
  • 重建索引的方式:alter table T engine=InnoDB

问题2 :

  • 检索的时候索引树已存在所需的信息,不需要通过回表进行再次查询,参照下图的覆盖索引的B+树结构,第一行为列s,第二行为对应的主键id,如果只需要查询列s或主键id时,就不用通过主键回表查询,减少执行时间。 file

问题3:

  • 联合索引指将多个字段联合创建一个索引,联合索引在数据库操作期间所需的开销更小,可以代替多个单一索引,其主要目的是形成索引覆盖,提高where语句的查询效率。
  • 使用场景:
    • 在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高
    • 在高频查询场景下,想通过字段A查询字段B的信息,这个时候就能通过建立联合索引使用到覆盖索引,不需要通过回表再次查询,减少语句的执行时间。

扩展阅读:dev.mysql.com/doc/refman/8.0/en/mu...

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!