Mysql索引
MySQL中的索引是一种用于加速数据检索的高效数据结构,类似于书籍的目录。它通过优化数据存储和查询路径,显著减少全表扫描的开销。
1.索引的核心作用
加速查询:避免全表扫描,直接通过索引定位数据位置(如B+树结构减少磁盘IO次数)。
保证唯一性:唯一索引(UNIQUE)和主键索引(PRIMARY KEY)确保列值唯一
优化排序和分组:索引已按规则排序,可加速 ORDER BY、GROUP BY 操作
2.索引的数据结构
B+树(主流结构):多层级平衡树,叶子节点存储数据指针并形成有序链表,适合范围查询。
B+树和B树的对比:
对于B树来说,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针跟着减少,要同样保存大量的数据,只能增加树的高度,导致性能降低
哈希索引:基于哈希表,仅支持精确匹配(如 =、IN),适用于等值查询
全文索引:大文本字段的模糊搜索(如 LIKE ‘%keyword%’),支持分词检索
3. 索引分类
聚集索引选取规则:
- 如果存在主键,主键索引就是聚集索引。
- 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引
- 若以上都没有,则InnoDB会自动生成一个rowid作为隐藏的聚集索引
案例
4. 索引的优缺点
优点 | 缺点 |
---|---|
查询速度提升(尤其大表) | 占用额外存储空间 |
加速排序、分组、连接操作 | 增删改操作变慢(需动态维护索引) 6 13 |
唯一性约束保障 | 过多或不合理索引可能降低性能 4 10 |
数据库的事务
什么是事务? 多条sql语句,要么全部成功,要么全部失败
事务的特性:原子性,一致性,隔离性,持久性
- 原子性:组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有操作都成
功, 整个事务才会提交。任何一个操作失败,已经执行的任何操作都必须撤销,让数据库返回初始状态。 - 一致性:事务操作成功后,数据库所处的状态和它的业务规则是一致的。即数据不会被破坏。如 A 转账 100 元给 B,不管操作是否成功,A 和 B 的账户总额是不变的。
- 隔离性:在并发数据操作时,不同的事务拥有各自的数据空间,它们的操作不会对彼此产
生干 扰 - 持久性:一旦事务提交成功,事务中的所有操作都必须持久化到数据库中