一条 SQL 执行很慢的原因
分两种情况,
- 大多数时候正常,偶尔很慢。
原因可能是,MySQL 后台线程在刷脏页。 - 一直很慢。
原因可能是,没用索引,或者加了索引,但索引失效,
又或者 MySQL 优化器选错索引,可以使用 use index 来指定索引
那如何优化 MySQL 呢?
从表、索引、SQL 和参数四个维度来优化。
表优化
- 首先,尽量选择小的数据类型,处理更快。
- 其次,要适当增加冗余字段,减少多表查询,以空间换时间。
- 最后,如果单表数据量过大,就要考虑分库分表
索引优化
- 首先,要擅用,比如为经常作为查询条件的字段创建索引,为不重复的字段创建唯一索引。
- 其次,不能滥用,像性别这样唯一性很差的字段,就不适合创建索引。
- 最后,可以适当使用覆盖索引和前缀索引。覆盖索引能减少回表次数,
前缀索引用子串作为索引,能节省空间,但是就用不上覆盖索引。
SQL 优化
- 首先,可通过慢查询日志发现需要优化的 SQL 语句,然后使用 Explain 分析语句的执行计划。
- 其次,要尽量避免使用 select *,而是指定具体的字段。
- 最后,MySQL 优化器可能选错索引,可以使用 use index 来指定索引
参数优化
可以增大 redo log buffer 的大小,来减少写回磁盘的 IO 操作。