文章目录
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 |
---|---|---|
逐行删除表的内容,逻辑删除 | 整个表的删除全表内容,物理删除 | 连表带表的内容全部一起删除 |