MySQL数据库简单优化(一)
mysql数据库简单优化 – sql语句优化
近期学了一些mysql的简单优化方法,做一下小的总结
mysql慢查询日志的开启和使用
我们可以通过下面的sql语句来简单查看本机中的慢查询日志的设置情况。1
2
3
4
5
6
7
8//查看是否开启慢查询日志
show variables like 'slow_query_log';
//查看是否开启了把没用到索引的sql语句插入到慢查询日志中
show variables like 'log_queries_not_using_indexes';
//查询时间超过多少秒的sql添加到慢查询日志中
show variables like 'long_query_time';
//查看慢查询日志存放位置
show variables like 'slow_query_log_file';
再来我们对其进行一些简单的设置:1
2
3
4
5
6
7
8//开启把没有用到索引的sql语句查询添加到慢查询日志中
set global log_queries_not_using_indexes = on;
//开启慢查询日志
set global slow_query_log = on;
//sql查询时间超过多少秒的添加到慢查询日志中,单位秒,根据实际情况自定义时间
set global long_query_time = 1;
//可选,设置慢查询日志所存放的路径,不设置则为默认路径
set global slow_query_log_file='yourpath';
慢查询日志所包含的信息内容可分为:
- 执行sql的主机信息
- sql的执行信息,报告sql执行所用的时间,所锁定的时间,所发送的行数,所扫描的行数
- sql执行的时间戳时间
- sql的内容
慢查询日志分析工具
开启了慢日志查询之后,我们要对其中的语句进行分析,简单介绍两个工具。
1.mysqldumpslow
这是系统自带的,通过mysqldumpslow -h
查看具体参数
比如:
mysqldumpslow -t 3 慢查询日志所存路径//分析top3的慢日志
分析中包括了执行次数,执行时间,锁定时间,执行所扫描的行数,以及所查询的sql语句
2.pt-query-digest
这个功能比较强大= =。。
##explain的使用
我们可以通过 explain
来查询sql的执行计划
返回的各列的含义:1
table : 显示这一行的数据是关于哪张表的
type : 显示连接使用了何种类型,从最好到最差的连接类型为const,eq_reg,ref,range,index,ALL
possible_key : 显示可能应用在这张表中的索引,为空表示没有可能的索引
key : 实际使用的索引,如果为空表示没有使用索引
key_len : 使用的索引的长度,在不损失精确性的情况下,长度越短越好
ref : 显示索引的哪一列被使用了,如果可能的话是一个常数
rows : mysql认为必须检查的用来返回请求数据的行数
extra列需要注意的返回值,看到下列两种的时候需要进行优化
Using filesort : mysql需要进行额外的步骤来发现如何对返回的行排序,
它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行
Using temporary : mysql需要创建一个临时表来存储结果,
这通常发生在对不同的列集进行order by上,而不是group by 上
一些例子:
1.子查询的优化,一般会把子查询优化为join查询,要注意的是,提前确定是否存在一对多的关系
2.
select title from film order by film_id limit 50,5
可以优化成
select title from film where film_id>55 and film_id<=60 order by film_id limit 1,5;
其中film_id是主键