mysql 优化详解_MySQL之SQL优化详解(三)

1. 索引优化

一旦建立索引,select 查询语句的where条件要尽量符合最佳左前缀的原则,如若能做到全值匹配最好。

索引优化的第一个前提就是建好索引,第二个就是避免索引失效

索引失效的场景

如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列

不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描

存储引擎不能使用索引中范围条件右边的列

b82887bdf4c57f96ef4fb488a1f3981c.png

mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描

is null ,is not null 也无法使用索引

like以通配符开头('%abc...') mysql索引失效会变成全表扫描的操作

少用or,用它来连接时会索引失效

小总结:

假设index(a,b,c)

Where语句

索引是否被使用

where a = 3

Y,使用到a

where a = 3 and b = 5

Y,使用到a,b

where a = 3 and b = 5 and c = 4

Y,使用到a,b,c

where b = 3 或者 where b = 3 and c = 4 或者 where c = 4

N

where a = 3 and c = 5

使用到a, 但是c不可以,b中间断了

where a = 3 and b > 4 and c = 5

使用到a和b, c不能用在范围之后,b断了

where a = 3 and b like 'kk%' and c = 4

Y,使用到a,b,c

where a = 3 and b like '%kk' and c = 4

Y,只用到a

where a = 3 and b like '%kk%' and c = 4

Y,只用到a

where a = 3 and b like 'k%kk%' and c = 4

Y,使用到a,b,c

2. 剖析报告:Show Profile

是什么:是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优的测量

官网介绍:show profile

默认情况下,参数处于关闭状态,开启后默认保存最近15次的运行结果

1.是否支持,看看当前的mysql版本是否支持

Show variables like 'profiling';

42a7153f3ae1f4c319a7e26e415882bd.png

2.开启功能,默认是关闭,使用前需要开启

set profiling=on;

6e0113865ea287eb8d0c7a601b164edf.png

3.运行SQL

select * from emp group by id%10 limit 150000;

select * from emp group by id%20 order by 5

4.查看结果 show profile;

0c48994eac12642a4bba80836db1bd8a.png

5.诊断SQL,show profile cpu,block io for query 上一步前面的问题SQL数字号码;

646845b1daf61c823bb2f648f6c14a88.png

Status

建议

System lock

确认是由于哪个锁引起的,通常是因为MySQL或InnoDB内核级的锁引起的建议:如果耗时较大再关注即可,一般情况下都还好

Sending data

从server端发送数据到客户端,也有可能是接收存储引擎层返回的数据,再发送给客户端,数据量很大时尤其经常能看见备注:Sending Data不是网络发送,是从硬盘读取,发送到网络是Writing to net建议:通过索引或加上LIMIT,减少需要扫描并且发送给客户端的数据量

Sorting result

正在对结果进行排序,类似Creating sort index,不过是正常表,而不是在内存表中进行排序建议:创建适当的索引

Table lock

表级锁,没什么好说的,要么是因为MyISAM引擎表级锁,要么是其他情况显式锁表

create sort index

当前的SELECT中需要用到临时表在进行ORDER BY排序建议:创建适当的索引

checking query cache for querychecking privileges on cachedsending cached result to clienstoring result in query cache

和query cache相关的状态,已经多次强烈建议关闭

6. 日常开发需要注意的结论

Creating tmp table 创建临时表

Copying to tmp table on disk 把内存中临时表复制到磁盘,危险!!!

locked 被锁住

示例:剖析 select * from emp group by id%20 order by 5

b31785b4540469168534b92f5e783f42.png

由剖析报告看出,其中 Copying to tmp table 步骤花费了大量的时间,所以这条SQL应该优化了。

注:该文的SQL只是为了便利的梳理知识点使用,不需要关心这条SQL为什么这样写,了解以上知识的使用方法就可以啦

MySQL之SQL优化详解(二)

目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...

MySQL之SQL优化详解(一)

目录 慢查询日志 1. 慢查询日志开启 2. 慢查询日志设置与查看 3.日志分析工具mysqldumpslow   序言: 在我面试很多人的过程中,很多人谈到SQL优化都头头是道,建索引,explai ...

【转】MySQL用户管理及SQL语句详解

[转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysq ...

MySQL数据库优化详解&lpar;收藏&rpar;

MySQL数据库优化详解 mysql表复制 复制表结构+复制表数据mysql> create table t3 like t1;mysql> insert into t3 select * ...

mysql用户授权、数据库权限管理、sql语法详解

mysql用户授权.数据库权限管理.sql语法详解 —— NiceCui 某个数据库所有的权限 ALL 后面+ PRIVILEGES SQL 某个数据库 特定的权限SQL mysql 授权语法 SQL ...

ORACLE PL&sol;SQL编程详解

ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

MySQL 执行计划explain详解

MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...

MySQL复制相关参数详解

MySQL复制相关参数详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.复制相关系统变量 1>.server_id 是必须设置在master和每个slave上的唯一标 ...

MySQL-5&period;5&period;32 配置文件优化详解

目录 MySQL-5.5.32 配置文件优化详解 一.配置文件说明 2.my-medium.cnf 3.my-large.cnf 4.my-huge.cnf 5.my-innodb-heavy-4G. ...

随机推荐

C&num;各种数组直接的数据复制&sol;转换

之前做Opengl程序,用的的C#的SharpGL这个库,里面有各种奇怪绑定的函数,比如原型为: void glInterleavedArrays(uint format, int stride, v ...

Centos安装(更新)git(亲测有效)

Centos 6.5默认安装的是git 1.7.X 版本,使用过程中会有一些奇怪的问题,对于用户名.密码支持不是很友好.将Centos6.5上的git更新到2.0.5,方法如下: 1.安装编译git时 ...

reaver 使用方法和技巧

reaver非常的不错,为我们ceng网带了最大的方便,使用简单,我来讲一下自己使用心得吧! 第一步,如果用虚拟机用vmware的,总会出现鼠标不灵点不到地方,换了一个 6.0.2 build-598 ...

获取checkboxlist选中的值以及绑定来自之前选中的来自数据库的值

//ps:一下几句都是一个意思,为的是以后有人搜索关键字的时候能定位到这里///checkboxlist绑定选中值///checkboxlist绑定来之mssql数据的值///checkbox ...

C&num; DES 加密解密

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.S ...

mybatis入门配置和调试

欢迎转载http://www.cnblogs.com/jianshuai520/p/8669177.html大家一起努力,如果看的时候有图片半边遮挡起来的话,右键查看图片,就可以观看完整的图片,具体怎 ...

mybatis Mapper XML 映射文件

传送门:mybatis官方文档 Mapper XML 文件详解 一. 数据查询语句 1. select

Ubuntu安装Gogs服务

花了半天的时间把阿里云的centos 换成了ubuntu 14.04 lts ,原因是因为我想安装个gogs git服务,但是centos的glibc版本太低,折腾了半天没有成功. 迁移Ghost数据 ...

使用级联分类器实现人脸检测(OpenCV自带的数据)

#include #include using namespace cv; using namespace st ...

M0 M4之GPIO初始化

新唐所有的M0/M4芯片基本上所有的IO都可以发生中断,为了符合大家的习惯还是有所谓的外部中断EINT0和EINT1.有2跟GPIO脚可以配置为EINT0功能和EINT1功能,分别将发生EINT0中断 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值