如何分析mysql的查询语句
来源:互联网 发布:摄影灯品牌 知乎 编辑:程序博客网 时间:2024/06/03 09:47
在项目中,有时候时间紧,我们往往比较关注功能,对于性能关注度没有那么高,书写的SQL能够支持功能即可,但是在线上运行过程中,会出现各种问题,sql太慢,这时候我们的第一反应是是不是没走索引,于是找到DBA说加个索引,但是其实有了索引查询未必快,具体问题需要具体分析,对于查询,我们可以自己通过explain来分析一下,这样和DBA沟通起来会非常方便。
这里顺便总结一下mysql的监控情况,linux的系统级别监控就不提了,因为mysql是IO密集型应用,所以重点关注iowait,对于mysql本身,qps(每秒内查询的次数)TPS(每秒内提交的事务,可以理解为insert+update+update),thread running(当前处于活动状态的数据库连接数),最重点的就是RT,貌似mysql没发直接查看响应时间,这个DBA写工具解决,这个指标可以视为在紧急情况下首要关注的,其次还有innodb层的监控,这个作为开发就比较业余了。
这里抄袭一下索引设计的几个原则:
A、设置索引项,应该是出现在where后面的列,或者连接字句中出现的列;
B、使用唯一索引,索引的基数越大,索引查询的效果越好,举例:查询条件中含有索引字段和非索引字段的时候,会优先走索引筛选出数据,然后在数据中回表过滤没有走索引的字段,但是Mysql任务,如果索引筛选出的数据量大于20%,会认为此时走索引效果不如全表扫描,继而放弃索引,走全表扫描来查询;
C、使用短索引,例如一个属性200多位,其实索引只要创建前几位效果会好;
D、最左原则,组合索引中,灵活运用最左前缀;
E、不要过度使用索引,索引会占用空间,影响写入的速度;
(1)慢SQL如何获取?
应用程序能够感知到SQL慢,因为慢了,提供服务就慢,系统吞吐自然就上不去。这时候可以在mysql上面查看慢SQL的日志,这个文件看起来不是很方便,DBA通过工具把这些日志加工成比较容易分析,能够很直观的看出慢SQL是啥,以及SQL执行花费的时间和执行的时间点。获取了这些慢SQL,就有了分析的依据。
(2)如何分析SQL为啥慢了?
mysql提供了一个工具来分析SQL执行查询的时候的情况,使用很简单:explain select语句
输出的结果是表格,各个字段的解释如下:
select_type
simple:简单表,即不使用表连接或者子查询;
primary:主查询
union:union中的第二个或者后面的查询语句
subquery:子查询中的第一个select
table
输出结果集的表
type
表连接的类型
system:表中仅有一行,即常量表
const:单表中最多有一个匹配行,主键或者唯一索引
eq_ref:对于前面的每一行,在此表中只查询一条记录,简单说就是多表查询中使用主键或者唯一索引
ref:和eq_ref类似,区别在于使用的是普通的索引
ref_or_null:和ref类似,区别在于查询总有NULL的查询
index_merge:索引合并优化
unique_subquery:in后面是一个查询主键的子查询
index_subquery:in后面的是一个查询普通索引的子查询
range:单表中的范围查询
index:前面的每一行,都通过查询索引获取数据
all:全表扫描,性能最差
possible_keys
查询时可能用到的索引
key
查询时实际用到的索引
key_len
索引字段的长度
ref
rows
扫描行的数量
extra
执行情况的说明和描述
- 如何分析mysql的查询语句
- 如何分析mysql的查询语句
- MySQL的查询语句EXPLAIN分析
- mysql 查询语句分析explain
- MySql分页查询语句分析
- mysql的查询语句
- Mysql的分页查询语句的性能分析
- 如何设计高效合理的MySQL查询语句
- MySQL如何查询当前正在运行的SQL语句
- 教您如何设计高效合理的MySQL查询语句
- MySQL如何快速定位慢查询的语句
- 如何设计高效合理的MySQl查询语句
- 如何查询mysql中执行效率低的sql语句
- mysql查询语句分析 explain用法
- mysql查询语句分析 explain用法
- mysql的where查询语句后有多个“or”的SQL语句执行分析!
- 简单查询语句的分析
- mysql的经典查询语句
- java异常详解
- 把两条极坐标曲线变成一条曲线的方法
- 解决SVN在MyEclipse安装后无法显示的问题
- IDEA Cannot resolve symbol 'String' 错误解决
- 电信SMGP协议,基于开源的jar文件smgpapi20100113.jar进行实现
- 如何分析mysql的查询语句
- Python zip函数详解
- java系统高并发解决方案(转载)
- Trie树(字典树)从懵逼到入门
- php魔术方法
- Java设计模式--享元模式【Flyweight Pattern】
- web应用 tomcat调优
- secureCRT利用 Zmodem 和 TFTP 上传/下载文件
- Picasso使用解析