Mysql优化
详情请查看https://www.cnblogs.com/clsn/p/8214048.html
1、为什么要对数据库进行优化?
1.1、避免出现页面访问错误
- 由于数据库连接timeout产生页面5xx的错误
- 由于慢查询造成页面无法加载
- 由于阻塞造成数据无法提交
1.2、增加数据库的稳定性
- 很多数据库问题都是由于低效的查询引起的
1.3、优化用户的体验
- 流畅页面的访问速度
- 良好的网站功能体验
2、数据库的优化可以从以下几个方面
2.1、sql以及索引
2.2、数据库表结构
2.3、系统配置
2.4、硬件
3、sql以及索引的优化
3.1、慢查询日志的常用sql
是否开启慢查询日志,有两个值off/on。
show VARIABLES like 'slow_query_log'
设置是否开启慢查询。
set global slow_query_log = on
查看日志文件的状态
show VARIABLES like '%log%'
设置开启未使用索引的查询
set GLOBAL log_queries_not_using_indexes=on
查看慢查询的设置时间,默认为10秒;设置慢查询的时间为1s
show VARIABLES like 'long_query_time'
set long_query_time = 1
3.2、慢查询日志的存储格式
执行该sql的时间
# Time: 2018-09-17T07:18:02.492417Z
执行该条sql的主机信息
# User@Host: root[root] @ localhost [127.0.0.1] Id: 26
该条sql的执行信息
# Query_time: 0.002000 Lock_time: 0.000000 Rows_sent: 356 Rows_examined: 712
该条sql的执行时间
SET timestamp=1537168682;
该条sql的内容
select * from t_user LIMIT 6;
3.3、使用explain来执行SQL的执行计划
expalain返回各列的含义:
table:显示这一行的数据是关于哪张表的
type:这是最重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和All。
possible_keys:显示可能应用在这张表中的索引。如果为NULL,没有可能的索引。
key:实际使用的索引。如果为NULL,没有使用索引。
key_len:使用的索引的长度,在不损失精度的情况下,长度越短越好。
ref:显示索引的那一列被使用了,如果可能的话是一个常数。
rows:MYSQL认为必须检查的用来返回请求数据的行数。
Extra:Extra列需要注意的返回值。
Using filesort:看到这个的时候查询就需要优化了,
Using temporary:看到这个的时候查询就需要优化了。MYSQL需要创建一个临时表来存储结果,这通常发生在不同的列集进行ORDER BY上,而不是GROUP BY上。