MySQL 核心知识点整理
MySQL 数据排序
MySQL 的数据排序主要有两种方式:
- 有索引:直接按照索引排序。
- 无索引:采用文件排序。
- 数据量少:内存排序,使用单路或双路排序(类似于用一只手或两只手抓数据)。
- 数据量大:磁盘排序,通常采用归并排序。
SQL 语句的执行顺序
- 连接器校验权限。
- 分析器解析 SQL 语法,构建解析树。
- 优化器选择合适的索引和表连接顺序,生成多个执行计划,选择成本最低的执行。
- 执行器调用存储引擎查询数据并返回。
MySQL 的存储引擎
- InnoDB:支持事务、行级锁、外键,默认存储引擎。
- MyISAM:不支持事务,读取性能高,适合查询密集型业务。
MySQL 索引类型
- 普通索引(辅助索引):提升查询效率,但不保证唯一性。
- 主键索引(聚簇索引):数据存储在 B+ 树叶子节点,查询效率高。
- 唯一索引:确保字段值唯一,查询速度快。
- 联合索引:多个字段组合建立索引,遵循最左前缀匹配原则。
- 全文索引:适用于长文本的模糊查询。
- 空间索引:存储地理位置信息,如经纬度。
MySQL 事务
事务的实现
- 锁:确保数据一致性,避免并发冲突。
- undo log:记录事务前的数据,回滚时使用。
- redo log:记录已提交事务的修改,崩溃后可恢复。
- MVCC(多版本并发控制):允许事务读取快照数据,提高并发性能。
事务的隔离级别
隔离级别 | 说明 | 可能问题 |
---|---|---|
读未提交 | 可以读到未提交数据 | 脏读 |
读已提交 | 只能读到已提交数据 | 不可重复读 |
可重复读 | 事务中多次查询数据不变 | 幻读 |
串行化 | 事务串行执行 | 影响性能 |
二阶段提交(2PC)
- 准备阶段:协调者通知参与者执行事务,所有参与者先写入日志但不提交。
- 提交阶段:所有参与者都准备好后,协调者通知提交,否则回滚。
MySQL 常见优化
- 使用索引:避免无索引字段排序,尽量使用覆盖索引。
- 避免使用
LIKE %XXX%
:会导致全表扫描。 - EXPLAIN 分析执行计划:查看是否走索引、是否全表扫描。
评论