文章目录
1)说明Mysql的一条语句执行过程。

下面这幅图来自作者推荐的文章:
一条SQL语句在MySQL中如何执行的

2)解释常说的“双一机制”(安全性能高)
参数:innodb_flush_log_at_trx_commit
| 0 | 1 |
|---|---|
| 将redo log每秒刷新一次到文件系统缓存,再同步到磁盘 | 每次事务提交,将redo log同步到磁盘 |
参数:sync_binlog
| 0 | 1 |
|---|---|
| 事务提交后,由文件系统判断何时将缓存的binlog数据刷写至磁盘 | 每次事务提交后,缓存的binlog数据都会刷写到磁盘 |
参数:innodb_flush_method
| fsync | O_DSYNC | O_DIRECT |
|---|---|---|
| 日志和数据从缓冲区先写入文件系统缓存,再写入磁盘 | 日志从缓冲区直接写入磁盘 | 数据从缓冲区直接写入磁盘 |
3)Innodb和Myisam
| Innodb | Myisam |
|---|---|
| 支持事务 | 不支持事务 |
| 支持行级锁 | 支持表级锁 |
| 支持MVCC(多版本并发控制) | 不支持MVCC |
| 支持外键 | 不支持外键 |
| 不支持全文索引 | 支持全文索引 |
| 支持热备份 | 不支持热备份 |
4)与Innodb相比,Myisam的统计行数的区别
当使用select count(*)且不加where条件,则表示统计全表的总行数。
此时Myisam有一个内部变量存储了表的行数,因此可以直接调用,因此其统计行数速度更快。
而Innodb也有一个存储行数的变量,但它是估计值,因此意义不大。
5)delete、truncate、drop的区别
| delete | truncate | drop |
|---|---|---|
| 逐行删除表的内容,逻辑删除 | 整个表的删除全表内容,物理删除 | 连表带表的内容全部一起删除 |
本文概述了MySQL一条语句执行流程,介绍双一机制(InnoDB的flush策略),比较InnoDB和MyISAM的不同特性,如事务支持、锁类型和统计行数,并剖析delete、truncate和drop操作的区别。
914

被折叠的 条评论
为什么被折叠?



