当前位置: 首页 > news >正文

MySQL索引和事务笔记

文章目录

    • 一、索引
      • 1. 索引是什么?
      • 2. 索引的优缺点
        • 优点
        • 缺点
      • 3. 索引的操作
      • 4. 索引背后的数据结构
      • 5. 面试高频问题
    • 二、事务
      • 1. 事务的作用
      • 2. 事务的实现机制
      • 3. 事务的基本操作
      • 4. 事务的四大特性(ACID)
      • 5. 并发事务常见问题
      • 6. 事务隔离级别
    • 三、总结与建议

一、索引

1. 索引是什么?

  • 类似于书的目录(Index),用于加速查询。
  • 查询时默认全表遍历,复杂度 O(N),每行需硬盘读取,效率低。
  • 索引通过特殊数据结构(如B+树)提升查询速度。

2. 索引的优缺点

优点
  • 显著提升查询效率,特别是大数据量场景。
  • 查询频率高于增删改的业务场景下尤为合适。
缺点
  • 占用额外存储空间。
  • 增删改操作时需同步维护索引,可能影响写入性能。

3. 索引的操作

  • 查看索引
    show index from 表名;
    主键、唯一键(unique)、外键(foreign key)都会自动生成索引。

  • 创建索引
    create index 索引名 on 表名(列名);
    注意:大表上创建索引是危险操作,可能导致大量IO,建议提前规划。

  • 删除索引
    drop index 索引名 on 表名;
    只能删除自建索引,不能删除自动生成的主键/唯一索引。

4. 索引背后的数据结构

  • 二叉搜索树
    高度大、IO次数多,不适合数据库索引。

  • 哈希表
    只支持等值查询,不支持范围和模糊查询。

  • B+树(主流索引结构)

    • N叉搜索树,树高度低,减少硬盘IO。
    • 叶子节点存储所有数据,并通过链表连接,方便范围查询。
    • 查询都落在叶子节点,查询开销稳定。
    • 非叶子节点只存key,不存数据,空间占用小。
    • 适合数据库大规模数据的高效检索。

5. 面试高频问题

  • 索引是什么?解决了什么问题?
  • 索引的代价(空间、写入性能)。
  • 如何操作索引?注意事项?
  • 索引的数据结构及B+树的优势。

二、事务

1. 事务的作用

  • 保证一组SQL操作的原子性,要么全部执行,要么全部不执行(回滚)。
  • 典型场景:银行转账,防止只转出未转入。

2. 事务的实现机制

  • 数据库通过日志体系记录每一步操作,支持回滚和崩溃恢复。
  • 不是所有操作都能回滚(如drop database)。
  • 事务操作应尽量简短,避免长事务。

3. 事务的基本操作

  • 开启事务:start transaction;
  • 提交事务:commit;
  • 回滚事务:rollback;

4. 事务的四大特性(ACID)

  1. 原子性(Atomicity)
    要么全部执行,要么全部不执行。

  2. 一致性(Consistency)
    事务前后,数据都处于合法状态。

  3. 持久性(Durability)
    事务提交后,数据永久保存在硬盘。

  4. 隔离性(Isolation)
    并发事务间互不干扰,避免相互影响。

5. 并发事务常见问题

  • 脏读
    一个事务读取到另一个未提交事务的数据。

  • 不可重复读
    同一事务内多次读取,数据被其他已提交事务修改,导致结果不一致。

  • 幻读
    一事务多次查询,期间其他事务插入/删除了数据,导致结果集数量不同。

6. 事务隔离级别

隔离级别脏读不可重复读幻读并发性说明
read uncommitted最高可读未提交数据,最不安全
read committed较高只读已提交数据
repeatable read较低读写都加锁,MySQL默认级别
serializable最低串行执行,最安全最慢

三、总结与建议

  • 索引是提升查询性能的利器,但需权衡空间和写入性能。
  • B+树是数据库索引的核心结构,掌握其原理有助于面试答题和实际优化。
  • 事务保证数据可靠性,理解ACID和隔离级别是数据库开发的基础。
  • 索引和事务都需结合实际业务场景合理使用,避免过度依赖或滥用。
http://www.dtcms.com/a/306480.html

相关文章:

  • 如何通过项目管理系统提升交付率
  • Kafka 重复消费与 API 幂等消费解决方案
  • IO复用实现并发服务器
  • 【PZ7020-StarLite 入门级开发板】——FPGA 开发的理想起点,入门与工业场景的双重优选
  • 【工具】jsDelivr CDN完全指南:免费高速的开源项目CDN服务
  • Apache Ignite 与 Spring Boot 集成
  • Linux 进程管理与计划任务设置
  • 【Dv3admin】ORM数据库无法查询的问题
  • 如何修改VM虚拟机中的ip
  • opengauss数据库安装及测试
  • 【C语言】深度剖析指针(二):指针与数组,字符,函数的深度关联
  • SpringBoot中ResponseEntity的使用详解
  • .NET报表控件ActiveReports发布v19.0——正式兼容 .NET 9
  • 动态爱心视觉特效合集(含 WebGL 与粒子动画)
  • 传输层协议UDP与TCP
  • 微算法科技MLGO突破性的监督量子分类器:纠缠辅助训练算法为量子机器学习开辟新天地
  • G9打卡——ACGAN
  • ​​咖啡艺术的数字觉醒:Deepoc具身智能如何重塑咖啡机器人的“风味直觉”
  • Android基础(二)了解Android项目
  • Android补全计划 TextView设置文字不同字体和颜色
  • SAP-ABAP:SAP ABAP OpenSQL JOIN 操作权威指南高效关联多表数据
  • android-PMS-开机流程
  • 配置国内镜像源加速Python包安装
  • 第2章 cmd命令基础:常用基础命令(3)
  • xxljob-快速上手
  • 真 万人互动MMO游戏技术公開測試
  • 推扫式和凝视型高光谱相机分别采用哪些分光方式?
  • AutoSAR(MCAL) --- ADC
  • Helm在Kubernetes中的应用部署指南与案例解析
  • Newman+Jenkins实施接口自动化测试