Mysql索引
是什么#
在MySQL进行查询时,需要将全部数据加载到内存之中,然后以页的形式进行遍历查询,这样的查询效率太低,于是有了索引这个概念,索引类似于目录,将数据关键字整理为索引,通过索引查询数据会大大提高查询效率
分类#
物理存储#
不同的存储引擎的索引类型不同
MyISAM使用聚簇索引
InnoDB使用非聚簇索引
聚簇索引
聚簇索引是通过索引聚集数据生成,默认使用主键,没有主键则使用非空唯一索引,没有唯一索引则使用六个字节的rowId充当主键,而数据是存储在树的叶子节点的data域之中
回表:辅助索引的叶子节点的data域存储的是主键索引的索引值。在查询数据时,需要先定位获取主键索引的索引值,然后通过这个索引值在主键索引结构之中查询数据
非聚簇索引
索引和数据分开存放
数据结构#
B+tree,B Tree,Hash,红黑树,B+tree 是MySQL中被存储引擎采用最多的索引类型。
B+Tree与B Tree的区别
B+Tree
-
数据存储在叶子节点之中
-
节点包含的信息
-
关键字
-
指向下一层的指针
-
B Tree
-
节点包含的信息
-
关键字
-
指向对应数据的指针
-
指向下一层的指针
-
对比总结
- B+Tree每一个节点会存储更多的信息,相对于B Tree来说可以使用更少的IO次数读取到更多的数据
- B+Tree将数据都整合在了叶子节点,更方便与对数据进行统一处理
B+Tree与红黑树的区别
红黑树是平衡二叉树,但因为是二叉树,那么B+Tree相对于红黑树来说会深度会更大,进一步说就是红黑树检索到目标数据需要的磁盘IO次数会更多
B+Tree与HASH的区别
Hash查询数据的效率非常高,可以一次进行定位,不像B+Tree需要从根结点到叶子节点。
但是Hash结构的缺点在于他不能进行范围搜索,Hash结构是通过数据的hash值来进行定位,所以不能用于范围查找,只能用于查询确定的值。
为什么#
优点#
可以有效提高查询效率
缺点#
索引有专门的索引表,占用空间
每次数据更新都需要对相应索引进行更新
怎么用(索引优化)#
-
开启慢日志,获取需要进行优化的SQL语句
-
使用 explain 分析SQL语句
俩个关键字段
-
type
值为all,表示为全表查询,可以优化
-
extra
Using fileSort,表示排序没使用索引,可以优化
-
-
添加索引
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码