MySQL性能优化

优化目的

加速读写
避免出现页面错误
增强数据库稳定性

优化方向

SQL语句优化

通过慢查询日志发现问题SQL

有几点需要注意:
1.查询次数多且查询时间较长的语句
2.IO大的SQL(注意:Rows examine项)
3.未命中索引的SQL(注意Rows examine与Rows send的对比)

explain分析SQL

explain分析SQL执行计划:

explain SQL语句
mysql> explain select * from scores;
+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table  | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | scores | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   15 |   100.00 | NULL  |
+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

id :标识符
table:操作的是那张表
select_type:SELECT 语句类型,有simple、PRIMARY等
type:这个很重要,表示访问类型(ALL、index、range、 ref、eq_ref、const、system、NULL(从左到右,性能从差到好))
possible_keys:指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用(该查询可以利用的索引,如果没有任何索引显示 null)
key:实际用到的索引,如果没用到则显示null
ken_len:使用索引的长度
ref:列与索引的比较,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
rows:估算出结果集行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
extra:该列包含MySQL解决查询的详细信息,有以下几种情况:
Using where:不用读取表中所有信息,仅通过索引就可以获取所需数据,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤
Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询,常见 group by ; order by
Using filesort:当Query中包含 order by 操作,而且无法利用索引完成的排序操作称为“文件排序”
看到 Using temporary或Using filesort时就需要优化SQL了。

取余部分略