MySQL 知识点总结 & 校招面试常见问题
书籍推荐
- 《MySQL 必知必会》
- 《高性能 MySQL》
- 《MySQL 技术内幕innodb引擎》
Github 项目
常见问题
一条 sql 语句执行慢的原因
- 偶尔很慢
- 刷新脏页
- 当我们要往数据库插入一条数据、或者要更新一条数据的时候,这些更新的字段并不会马上同步持久化到磁盘中去,而是把这些更新的记录写入到 redo log 日记中去,等到空闲的时候,在通过 redo log 里的日记把最新的数据同步到磁盘中去。不过,redo log 里的容量是有限的,如果数据库一直很忙,更新又很频繁,这个时候 redo log 很快就会被写满了,这个时候就没办法等到空闲的时候再把数据同步到磁盘的,只能暂停其他操作,全身心来把数据同步到磁盘中去的,而这个时候,就会导致我们平时正常的SQL语句突然执行的很慢,所以说,数据库在在同步数据到磁盘的时候,就有可能导致我们的SQL语句执行的很慢了。
- 拿不到锁
- 这条语句涉及到的表,别人在用,并且加锁了,我们拿不到锁,只能慢慢等待别人释放锁了,可以用
show processlist
这个命令来查看当前的状态。
- 经常很慢
- 语句问题
- 导致全表扫描,没有用到索引。
- 其他
- 硬件问题
- 内存不足,带宽不够
MySQL 有哪些存储引擎以及他们之间的区别
- 常见存储引擎
- Mrg_Myisam
- Myisam*
- Blackhole
- CSV
- Memory*
- Archive
- InnoDB*
- Performance_schema
- InnoDB
- Myisam
- Memory
- 如何选择合适的存储引擎?
什么是索引
- MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。我们可以简单理解为:快速查找排好序的一种数据结构。Mysql索引主要有两种结构:B+Tree索引和Hash索引。
- 索引虽然能非常高效的提高查询速度,同时却会降低更新表的速度。实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的。
常用命令
数据库版本
select version();
查看语句执行时间
show profile
- 支持 mysql 5.0 以上数据库
- 使用
set profiling=1
打开此功能
查看 Mysql 支持引擎
show engines
持续整理中...