| 特性 | InnoDB | MyISAM | 
|---|---|---|
| 事务支持 | ✅ ACID | ❌ | 
| 行级锁 | ✅ | ❌(表锁) | 
| 外键约束 | ✅ | ❌ | 
| 崩溃恢复 | Redo Log | 无 | 
| 存储结构 | 聚集索引 | 堆表 | 
| 适用场景 | OLTP | 读密集型 | 
sqlCopy Code-- 创建组合索引示例
CREATE INDEX idx_name_age ON users(name, age);WHERE name = 123(name为字符串类型)WHERE YEAR(create_time) = 2023WHERE name LIKE '%张'| 级别 | 脏读 | 不可重复读 | 幻读 | 实现方式 | 
|---|---|---|---|---|
| Read Uncommitted | ✔️ | ✔️ | ✔️ | 无锁 | 
| Read Committed | ❌ | ✔️ | ✔️ | 语句级快照 | 
| Repeatable Read | ❌ | ❌ | ✔️ | 事务级快照(InnoDB) | 
| Serializable | ❌ | ❌ | ❌ | 全表锁 | 
SELECT ... LOCK IN SHARE MODESELECT ... FOR UPDATECodeEXPLAIN SELECT * FROM orders WHERE user_id = 100;slow_query_loglogCopy CodeLATEST DETECTED DEADLOCK
...SHOW ENGINE INNODB STATUSsqlCopy Code-- 低效写法
SELECT * FROM orders LIMIT 1000000, 20;
-- 优化方案
SELECT * FROM orders 
WHERE id > (SELECT id FROM orders ORDER BY id LIMIT 1000000, 1)
LIMIT 20;本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。