MySQL思考-索引

本文详细探讨了MySQL索引的本质、B-Tree和B+Tree知识,重点分析了MyISAM和InnoDB引擎的索引实现。同时,介绍了如何通过慢查询日志进行性能分析,并利用EXPLAIN理解SQL执行计划。最后,文章分享了索引分类、创建与删除方法,以及Filesort、GROUP BY、LIMIT和COUNT等常见查询的优化策略。
摘要由CSDN通过智能技术生成

一 索引本质

  1. 索引是什么?
索引:有序的数据结构。
  1. 索引目的?
帮助MySQL高效获取数据。
  1. 索引文件目录

MyISAM引擎

-rw-r-----. 1 polkitd input 61 9⽉ 2 11:31 db.opt
-rw-r-----. 1 polkitd input 8668 9⽉ 2 11:36 tb_user2.frm #表结构⽂件
-rw-r-----. 1 polkitd input 0 9⽉ 2 11:36 tb_user2.MYD #MyISAM引擎类型的表数据⽂件
-rw-r-----. 1 polkitd input 1024 9⽉ 2 11:36 tb_user2.MYI #MyISAM引擎类型的索引⽂件

InnoDB

-rw-r-----. 1 polkitd input 8668 9⽉ 2 11:33 tb_user.frm #表结构⽂件
-rw-r-----. 1 polkitd input 114688 9⽉ 2 11:34 tb_user.ibd #InnoDB的表空间⽂件,⽤于存储数据以及索引⽂件

二 MySQL索引前置知识

2.1 B-Tree知识

  1. 概念
度数:在树中,每个节点的⼦节点(⼦树)的个数就称为该节点的度(degree)。
阶数:定义为⼀个节点的⼦节点数⽬的最⼤值。
  1. m阶B-Tree满⾜以下条件
每个节点最多拥有m个⼦树
根节点⾄少有2个⼦树
分⽀节点⾄少拥有m/2颗⼦树(除根节点和叶⼦节点外都是分⽀节点)
所有叶⼦节点都在同⼀层、每个节点最多可以有m-1个key,并且以升序排列
每个⾮叶⼦节点由n-1个key和n个指针组成,key和指针互相间隔,节点两端是指针
  1. 3阶B-Tree的示意图(节点包含键值和数据)
    在这里插入图片描述
  2. 选用B-Tree做索引结构(MongoDB)
⼀次读取⼀个磁盘块数据中包含了多个key数据,这样就可以在内存中做⽐较操作,减少了磁盘IO的操作。

2.2 B+Tree知识

  1. B+Tree示意图
    在这里插入图片描述
  2. B+Tree相对于B-Tree有几点不同
⾮叶⼦节点只存储键值信息。
数据记录都存放在叶⼦节点中。
所有叶⼦节点之间都有⼀个s双向链指针。
  1. InnoDB为什么使用B+树做索引树

B+树的磁盘读写代价更低

内部节点只存储索引不存储数据。所以同一块磁盘中读取的索引数量就越多,减少IO的读写次数。

B+树的查询效率更加稳定

所以任何关键字的查找必须⾛⼀条从根节点到叶⼦节点的路。

三 索引结构与分析

3.1 MyISAM索引实现(B+Tree)

主键索引实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值