mysql数据库优化之语句优化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库优化之语句优化相关的知识,希望对你有一定的参考价值。
数据库优化目的
避免出现页面访问错误
1、由于数据库链接timeout产生页面5xxx错我
2、由于慢查询造成页面无法加载
3、由于阻塞造成数据无法提交
如何发现有问题的sql
使用mysql慢查日志对有效率问题的sql进行监控
show variables like ‘%slow%‘;
set global log_queries_not_using_indexes=on;
long_query_time 单位是秒 一般设置成100ms,也就是0.1秒
分析慢查工具
但是结果信息不是很全面
所以用pt-query-digest
第一部分是头显示了基本信息,时间范围 sql数量 第二部表统计信息 第三部分 sql信息
举例说明 就是,这个sql 执行了一次,但是执行时间占用了百分之73百分比,这种sql重点关注,就是执行次数多,占用总时间的百分比大。数据库主要瓶颈在io这,这个主要关注的是扫描行数,如果扫描的行数越多,说明他的io消耗也会越大。
第一个关注执行次数和执行时间占比,第二关注扫描行数examine,说明他的io消耗也会越大,第三 通过扫描行数 和发送行数,如果examine的扫描行数,远远大于send发送行数,说明sql索引命中率不高
找到慢的语句后如何进行优化
首先是用explaim这个从句,可以显示出sql的执行计划,原理数据库中的sql,先对执行计划分析,再对sql进行具体执行,那执行计划侧面的反应了sql的执行效率,
table 是这一行的数据是关于哪张表的 。
type这一列 const性能最好 性能最差就是ALL
const说明是个常数查找,一般是主键呢唯一索引进行查找,
eq-reg 是一种范围的查找,一般呢是唯一索引呢主键的范围查找,
ref 比较常见于连接的查询中,一个表是基于某个索引的查找,
range是索引的范围查找,
index是索引的扫描,
ALL是表扫描
没有where条件所以没有用到索引
key-len 索引的长度越短越好,因为mysql中的查询化过程中,索引长度越小越好的,mysql每次读取都是以页为单位的,一页中如果存储的索引数量越大,它的查询效率也就会越高。
rows 实际上就是表扫描的行数,
扩展列 一个是
filesort查询结果用到文件排序方式来进行优化,文件排序呢主要是在orderby程序中比较常见,
temporary 这个呢用到了临时表,无论filesort 或是temporpary都使用了外部文件或是临时表进行数据的存储,这种sql一般出现在order by group by 从句中,这样的sql也是要重点关注的。以上是explain 从句使用方式还有返回的一些值,执行计划
以上是关于mysql数据库优化之语句优化的主要内容,如果未能解决你的问题,请参考以下文章