NingG +

MySQL 最佳实践:常见问题汇总(3)

1. 三个范式

关于关系型数据库的 3 个范式:

个人感觉,第 2 范式与第 3 范式比较相似;

使用范式的情况:

  1. 范式的目标降低数据冗余;带来的问题:副作用:查询数据时,需要进行表的连接操作;
  2. 表格的连接操作比较耗时,需要在数据冗余范式之间做好权衡,通常允许一部分的数据冗余来减少表格的连接操作;

更多细节,参考:数据库设计 3 个范式

2. 行锁和表锁

MySQL InnoDB 存储引擎,行锁、表锁的基本区别:

MySQL中行锁、表锁:

更多细节,参考:

3. 定位低效率的 SQL

定位执行效率较低的SQL语句

具体要点:

  1. 开启慢查询日志
  2. 慢查询日志,是在查询结束后才记录,故,正在执行的慢SQL并不能被定位到;
  3. 使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态、是否锁表等等,可以实时地查看SQL的执行情况;
  4. 使用mysqldumpslow工具,来辅助查看慢查询日志;
  5. 使用explain,来分析SQL的执行计划;

更多细节,参考:

4. MyISAM 和 InnoDB 存储引擎比较

关键点:

更多细节,参考:

5. Explain 命令

Explain + SQL:可以分析 SQL 的执行计划,辅助定位问题

Explain 的分析结果,几个典型字段,以及含义:

更多细节,参考:

6. 常见问题汇总

之前的汇总:

同类文章:

微信搜索: 公众号 ningg ,即可联系我

Top