- 支持事务ACID特性,行级锁,外键,聚簇索引数据与索引存储在一起。
- 适用场景:读写频繁、需事务支持的业务如电商订单。
MyISAM
- 不支持事务,表级锁,非聚簇索引数据与索引分开存储。
- 适用场景:读多写少、不需要事务的场景如日志表。
二、索引类型与原理
1. B+树索引
- 有序排列,叶子节点存储数据InnoDB或指针MyISAM,支持范围查询。
- 优势:查询效率稳定, avg O(log n)。
2. 哈希索引 - 键值对存储,不支持范围查询,适合等值查询如Memory引擎。
3. 索引失效场景 - 使用函数/表达式如 `SUBSTR(name,1,3)='abc'`。 - 隐式类型转换如字符串不加引号。 - OR条件包含非索引列。 - LIKE以%如 `name LIKE '%张三'`。
三、事务隔离级别 1. 读未提交Read Uncommitted - 可能出现 脏读读取未提交数据。2. 读已提交Read Committed - 决脏读,可能出现 不可重复读同一事务多次读结果不同。
3. 可重复读Repeatable Read - MySQL默认级别,决不可重复读,通过MVCC实现。
4. 串行化Serializable - 最高隔离级别,表级锁,全避免并发问题,性能低。
四、查询优化技巧- 避免SELECT *,只查必要字段。
- 使用LIMIT分页,避免全表扫描。
- JOIN表数量不超过3张,减少关联开销。
- 避免在WHERE子句使用!=、NOT IN,可能导致索引失效。
- 大表DDL使用工具如pt-online-schema-change,避免锁表。
五、锁机制
- 行锁:InnoDB基于索引实现,未命中索引则升级为表锁。
- 表锁:MyISAM默认锁,读锁阻塞写,写锁阻塞读写。
- 间隙锁:InnoDB在可重复读级别下,防止幻读锁定范围区间。 覆盖MySQL高频面试题核心要点,需结合实际场景理记忆,避免死记硬背。
MySQL八股文背诵版怎么背效率更高?
MySQL八股文背诵版核心知识点整理
一、存储引擎对比
InnoDB
