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;  

 代表 记录下没有使用索引的sql 后面进行优化 ,记录未使用索引的 打开

long_query_time 单位是秒 一般设置成100ms,也就是0.1秒

 

 

 如果慢查日志时间短,会有大量的日志,磁盘空间可能会被沾满
技术分享
技术分享
 
 第一款MySQL官方的mysqldumpslow 
分析慢查工具 
 安装好mysql后自带的工具,mysqldumpslow -t 3 慢查日志路径 | more  查看

技术分享

 

但是结果信息不是很全面

所以用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数据库优化之语句优化的主要内容,如果未能解决你的问题,请参考以下文章

SQL优化之语句优化

数据库性能优化之SQL语句优化(转 java知音)

如何做SQL优化?优化SQL语句,提高SQL查询效率。Effective MySQL之SQL语句最优化

mysql数据库优化之语句优化

数据库性能优化之SQL语句优化(下)

数据库优化之SQL语句优化-记录