| 特性 | 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删除。