时间:2021-07-01 10:21:17 帮助过:30人阅读
数据库优化目的
避免出现页面访问错误
1、由于数据库链接timeout产生页面5xxx错我
2、由于慢查询造成页面无法加载
3、由于阻塞造成数据无法提交
如何发现有问题的sql
使用mysql慢查日志对有效率问题的sql进行监控
show variables like ‘%slow%‘;
set global log_queries_not_using_indexes=on;
代表 记录下没有使用索引的sql 后面进行优化 ,记录未使用索引的 打开long_query_time 单位是秒 一般设置成100ms,也就是0.1秒
如果慢查日志时间短,会有大量的日志,磁盘空间可能会被沾满 第一款MySQL官方的mysqldumpslow
但是结果信息不是很全面
所以用pt-query-digest
--limit=A 参数 -review expain 执行计划 如扫描行数很多,发送到客户端的很少,代表了索引不是很好
第一部分是头显示了基本信息,时间范围 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数据库优化之语句优化
标签:单位 fonts 如何 时间短 plain nbsp 打开 alt 命中