SQL语句优化

【数据库优化的目的】

1.避免出现页面访问错误

  由于数据库连接timeout产生页面5XX错误。

  由于慢查询造成页面无法加载。

  由于阻塞造成数据无法提交。

2.增加数据库的稳定性

  很多数据库问题都是由于低效的查询引起的。

3.优化用户体验

  流畅的访问速度。

  良好的网站功能体验。

 

【从哪些方面进行数据库优化】

 

【SQL及索引优化】
【如何发现有问题的SQL】

使用MySql慢查询对有效率问题的SQL进行监控

#是否开启了慢查询日志
show VARIABLES like 'slow_query_log'; #查看超过多少秒的查询会被记录到慢查询日志中
show VARIABLES like 'long_query_time' ;#指定慢查询日志所存储的位置
set GLOBAL slow_query_log_file = 'D:\mysql_log\mysql-slow.log' #把没有使用索引的SQL语句记录到慢查询日志中
set GLOBAL log_queries_not_using_indexes = ON ; #打开慢查询日志
set  GLOBAL slow_query_log = ON;#超过1秒的慢查询记录到日志中
set GLOBAL long_query_time = 1 ;

【慢查询日志的存储格式】

【这里有待补充....】

 

【如何通过慢查询日志发现有问题的SQL】

1.查询日数多且每次查询占用时间长的SQL

通常为pt-query-digest分析的前几个查询。

2.IO大的SQL

注意pt-query-digest分析中的Rows examine项。

3.未命中索引的SQL

注意pt-query-digest分析中的Rows examine 和 Rows Send 的对比。

 

【如何分析SQL查询】

使用explain查询SQL的执行计划

[ 字段解释 ]

table:显示这一行的数据是关于哪张表的

type:这是重要的列,显示连接使用了何种类型。最好到最差的连接类型为const、eq_reg、ref、range、index、ALL

possible_key:显示可能应用在这张表的索引,如果为空,没有可能的索引。

key:实际使用的索引。如果为NULL,则没有使用索引。

key_len:使用索引的长度。在不损失精确性的情况下,长度越短的越好。

ref:显示索引的哪一列被使用了,如果可能的话,是一个常数。

rows:MySQL认为必须检查的用来返回请求的行数。

Extra:该列需要注意的返回值:

   Using filesort:看到这个的时候,查询就需要优化了。MySQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部的行指针来排序全部行。

          Using temporary:看到这个的时候,查询就需要优化了。这里MySQL需要创建一个临时的表来存储结果,这通常发生在对不同的列集进行order by上,而不是group by上。

 

转载于:https://www.cnblogs.com/HigginCui/p/7450982.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ORA-27101 shared memory realm does not exist 错误处理

ORA-27101 错误处理 racle Database的主机被异常关机,重新启动电脑,Database报ORA-27101 shared memory realm does not exist 错误.可能是windows的oracle service 损坏,可以重建service试试是否可以修复。删除Service&#xff1…

js 获取 当天凌晨时间

需要进行时间比较的时候,一般会遇到从凌晨开始算 new Date(new Date().setHours(0, 0, 0, 0))

移动数据文件、控制文件、日志文件

1. ALTER DATABASE方法;-- 此方法要求关闭数据库-- 用此方法,可以移动任何表空间的数据文件。STEP 1. 下数据库:$ sqlplus /nologSQL> CONNECT INTERNAL;SQL> SHUTDOWN;SQL> EXIT;STEP 2.用操作系统命令移动数据文件:-- …

angular的性能分析 -随记

$watch 的实现原理和性能分析 只有双向绑定的 scope 才会被加入$watch队列,或者手动绑定$watch的$scope所有放在 $scope 中的变量或函数都被加入到了$watch队列当中,每次只要$scope中的一个变量的值发生变化,Angular就会自动调用$apply或者$d…

mongoose 联表、及联查询 使用populate

mongoose 中 使用 populate 进行多表联合查询 drawApply new Schema({salesId: { type: Schema.ObjectId, ref: sales },money: Number,status: { type: Number, default: 0 },createTime: { type: Date, default: Date.now } });sales new Schema({name: { type: String, r…

数据泵使用心得

数据泵在数据的导入、导出方面突出了它特有的优势,给数据库管理人员提供了极大的方便expdp导出数据 expdp常用参数介绍ATTACH 连接到现有作业, 例如 ATTACH [作业名]。COMPRESSION 减小有效的转储文件内容的大小关键字值为: (METADATA_ONLY) 和 NONE。CONTENT 指定要…

[2016-03-15]rabbitmq notes

安装 系统:CentOS 6 环境: rabbitmq 依赖的Erlang环境包 wget https://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el6.x86_64.rpm Server:rabbitmq-server安装包 wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.5.7/rabb…

mongoose 定义经纬度数据类型

本来想用Double在mongoose中直接定义经纬度的。但是发现mongoose的数据类型只有下面几种。 String Number Date Buffer Boolean Mixed ObjectId Array Decimal128 Map所以我们使用Decimal128来定义经纬度 const LocationsSchema new mongoose.Schema({latitude: {type: mong…

oracle导入中文数据出现乱码

两种情况下不会乱码1 数据库端的字符集和客户端一致2 数据库端的字符集包含(也可理解为:超集)客户端的字符集例如数据库端是 UTF-8 ,那么无论客户端是ZHS16GBK 还是Big5都可以存入,数据库端返回客户端时会做一次转换。…

VFP参考资料word版

《VFP参考资料word版》下载地址: 网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731452.html

腾讯地图 点聚合

首先,我有一万个理由,不想用腾讯地图,但只有一个理由说服我使用:做微信开发,地图组件需要和微信自带地图保持一致性。今天我做了腾讯地图很多marker点的聚合显示功能,主要参考官方的,下面是地址…

重建AD域控制器的DNS服务器

域控制器上重建AD集成dns区域1. 控制面板->管理工具,打开dns管理器,展开正向搜索区域,右键单击domain.com区域,选择删除,在提示对话框中选择“是”;如果存在 _msdcs.domain.com区域,右键单击…

sonyflake.go

// Package sonyflake implements Sonyflake, a distributed unique ID generator inspired by Twitters Snowflake.//第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位&#xff0c…

国内比较好用的5款测试管理工具

做好测试的前提是写好测试用例,写测试用例则需要一款好用的测试管理工具。国外有几款好用的测试管理工具,由于服务器部署在国外,国内访问会比较卡,还有就是语言不是中文的大家用起来也比较困难,这里就不推荐大家使用了…