MySQL索引
谈到MySQL索引,必然会想到索引概念,分类,结构,以及最左原则。
概念:索引是对数据库表中一个或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构
索引分类::普通索引、唯一索引、主键索引、全文索引,组合索引。
普通索引:只是为了方便快速查询。(无限制)。
主键索引:primary key :加速查找+约束(不为空且唯一)。
唯一索引:unique:加速查找+约束 (唯一)。
全文索引:用于搜索很长一篇文章的时候,效果最好。
组合索引:几个常用于搜索的列,组成的索引。遵循最左原则。
常用的索引结构:hash,二叉树,b树,b+树。
hash索引:索引结构是key-value结构,类似于大多数语言里的HashMap结构。这种结构将数据的key和offset保存在内存里,真是数据可以存储在disk中,从而突破内存大小的限制。
二叉树:二叉树是一种每个结点至多只有两个子树(即二叉树的每个结点的度不大于2),并且二叉树的子树有左右之分,其次序不能任意颠倒。
缺点:单边递增
b树:
b+树
-
数据索引的存储是有序的
-
在有序的情况下,通过索引查询一个数据是无需遍历索引记录的
-
极端情况下,数据索引的查询效率为二分法查询效率,趋近于 log2(N)
非聚集索引和聚集索引的区别在于?
通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据
加索引的副作用?
每次给字段建一个新索引, 字段中的数据就会被复制一份出来, 用于生成索引。 因此, 给表添加索引,会增加表的体积, 占用磁盘存储空间。
什么叫覆盖索引?辅助索引?聚集索引?联合索引?
覆盖索引:
1.覆盖索引是一种数据查询方式,不是索引类型
2.在索引数据结构中,通过索引值可以直接找到要查询字段的值,而不需要通过主键值回表查询,那么就叫覆盖索引
3.查询的字段被使用到的索引树全部覆盖到
举例子:
假设你定义一个联合索引
CREATE INDEX idx_name_age ON user(name,age);
查询名称为 liudehua 的年龄:
mysql> select name, age from user where name = 'liudehua';
上述语句中,查找的字段 name 和 age 都包含在联合索引 idx_name_age 的索引树中,这样的查询就是覆盖索引查询。
辅助索引(也叫非聚集索引):
辅助索引,也叫非聚集索引。叶子节点中并不包含行记录的全部数据。
聚集索引:
叶子节点中包含行记录的全部数据。
注意:一个表中只能拥有一个聚集索引。
联合索引:
联合索引是指对表上的多个列进行索引。
注意:联合索引遵循最左原则
哪些情况需要创建索引
- 主键自动建立唯一索引
- 频繁作为查询条件的字段应该创建索引
- 查询中与其他表关联的字段,外键关系建立索引
- 频繁更新的字段不适合建立索引,因为每次更新不单单是更新了记录还会更新索引
- WHERE条件里用不到的字段不创建索引
- 单键/组合索引的选择问题,who?(在高并发下倾向创建组合索引)
- 查询中排序的字段,排序的字段若通过索引去访问将大大提高排序速度
- 查询中统计或者分组字段
哪些情况不要创建索引
- 表记录太少
- 经常增删改的表
- 提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE、和DELETE。
- 因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
- 数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据建立索引。
- 注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。
innodb索引和myisam索引的区别
MyISAM索引文件和数据文件是分离的,索引文件的data域保存记录所在页的地址(物理存储位置),通过这些地址来读取页,进而读取被索引的行数据。
InnoDB存储引擎表是索引组织表,即按照主键的顺序存储数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)