mysql之sql性能调优
sql调优大致分为两步:1 如何定位慢查询 2 如何优化sql语句。
一:定位慢查询
-- 显示到mysql数据库的连接数
-- show status like 'connections'; -- 显示慢查询次数
show status like 'slow_queries'; -- 查看慢查询阈值 (默认是10秒)
show variables like 'long_query_time'; -- 修改慢查询时间 (但是重启mysql之后,long_query_time依然是my.ini中的值)
set long_query_time=1;
-- 此时再次查看mysql慢查询阈值就是刚设置的值了,一般sql执行时间超过1s,就是慢查询了。
如图:我们将慢查询时间设置为0.004s, 而select * from aaa; 执行花了0.005s,那么它就是慢查询,mysql会将慢查询语句直接写入日志文件中,我们就可以根据日志快速定位项目中的慢查询语句。
二:优化案例
查询只有命中索引才能高效,我们可以通过 explain 执行计划 来检查我们的sql语句是否命中了索引。
1:创建表, id为主键索引
CREATE TABLE ccc (
id int (5),
name varchar(50),
age int (3),
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 2:设置普通索引 create index 索引名 on 表 (列1,列名2);
create index ccc_index on ccc(name); 3:查入数据
insert into ccc VALUES (1, '吴磊', 23);
insert into ccc VALUES (2, '杰伦', 22);
insert into ccc VALUES (3, '二狗', 24);
type:性能从好到差为 const、eq_reg、ref、range、indexhe , 为 ALL 则表示没有命中索引
sql调优总结:
1. like 模糊查询:不要以%开头,它会丢失索引
explain select * from ccc where name like "吴磊" 命中索引
explain select * from ccc where name like "吴磊%" 命中索引
explain select * from ccc where name like "%吴磊" 丢失索引
explain select * from ccc where name like "%吴磊%" 丢失索引
2. null判断用: is 代替 =
explain select * from ccc where name is null 命中索引
explain select * from ccc where name = null 丢失索引
3. select * from user where age >100比select * from user where age >= 101 效率要高;前者只查了一次,后者查了2次
4. group by 分组:默认分组后,还会排序,可能会降低速度,
在group by 后面增加 order by null 就可以防止排序。 select * from ccc group by age order by null
5. 关连查询代替子查询,因为子查询会将查出来的结果集在内存中创建处一张临时表。
6. 关联查询尽量大表在前小标在后,mysql是以右边的表为驱动表。 from table(大), table2(小)
7. 尽量保证where的过滤条件中,哪个条件过滤的数据多久放在语句前面
8. 尽量 用0代替null 用exits代替in 交集代替!= ..........
9. 避免使用or, 他会丢失索引。
10. 离散程度大的条件放前面:比如 where a = 12 and b = 3 ,如果b有100条数据 a只有10条,那么b放在前面。
mysql之sql性能调优的更多相关文章
- mysql监控、性能调优及三范式理解
原文:mysql监控.性能调优及三范式理解 1监控 工具:sp on mysql sp系列可监控各种数据库 2调优 2.1 DB层操作与调优 2.1.1.开启慢查询 在My.cnf文件中添加如 ...
- MySQL插入数据性能调优
插入数据性能调优总结: 1.SQL插入语句调优 2.如果是InnoDB引擎的话,尝试开启事务,批量提交 3.调整MySQl数据库配置 参考: 百度空间 - MySQL插入数据性能调优 CSDN ...
- spark2.+ sql 性能调优
1.在内存中缓存数据 性能调优主要是将数据放入内存中操作,spark缓存注册表的方法 版本 缓存 释放缓存 spark2.+ spark.catalog.cacheTable("tableN ...
- mysql 索引优化 性能调优 锁
1 检查mysql 是否安装 rpm -qa|grep -i mysql 2 ntsysv 查看和设置开机启动列表 3 mysql 在 centos 上默认 的数据目录是 /var/lib/mysql ...
- SQL性能调优基础教材
一.数据库体系结构 1. Oracle数据库和实例 数据库:物理操作系统文件或磁盘的集合. 实例:一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程 ...
- OCP读书笔记(15) - 管理SQL性能调优
SQL Tuning Advisor(STA): 使用oracle提供的程序包进行sql优化 SQL> conn scott/tiger SQL), name )); SQL> inser ...
- 学会使用MySQL的Explain执行计划,SQL性能调优从此不再困难
上篇文章讲了MySQL架构体系,了解到MySQL Server端的优化器可以生成Explain执行计划,而执行计划可以帮助我们分析SQL语句性能瓶颈,优化SQL查询逻辑,今天就一块学习Explain执 ...
- mysql my.ini 性能调优
MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...
- SQL 性能调优日常积累
我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享! (1)选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE 的解析器按照从右到左 ...
随机推荐
- 谁掳走了 nginx.pid 文件?
1.重载配置 执行 nginx -s reload 命令,报错:找不到 nginx.pid 文件,无法打开.曾经屡试不爽的命令,此时,竟然失灵了? 刚开始,我一头雾水,有点丈二和尚摸不着头脑… ...
- android出现backtrace 定位方法
- MySQL_DQL操作
DQL(Data Query Language)简单的来说就是数据的查询语言. 1.最简单的查询(显示表中的所有信息) 语法: select * from 表名; 2.普通查询 语法: select ...
- 五大好用的开源MySQL管理工具推荐
众所周知,对于数据库管理工作者(DBA)来说,保持数据正常运行在最佳状态需要具备敏捷.专注.冷静和快速的反应能力.因为数据库几乎是所有应用程序成功运行的核心,由于DBA负责组织数据,因此寻找可靠的工具 ...
- 分析邮件日志从每秒处理3个结果到每秒处理800个结果过程(grep提速)
由于业务需要,对EDM发出的邮件日志进行分析处理,我要做的是预处理,把posfix杂乱无章的日志中找到我需要的数据. 我用javamail发的邮件,发送邮件时获取到是一个messageId,形如:21 ...
- iOS证书详解
一.成员介绍1. Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1) Developer Certification(开发证书)安装在电脑上 ...
- Windows环境下Mysql 5.7读写分离简单记录
一.目的 本文记录了在Windows环境中,mysql数据库读写分离配置过程. 二.准备: Master机器:Windows 10 虚拟机,IP:192.168.3.32 Slave机器:Window ...
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第3节 maven标准目录结构和常用命令_07maven常用命令
以给的hellowordl的的代码为例. src/main/java下,这是主业务逻辑代码 里面的内容只有一个jsp的跳转 测试包下: 里面很简单的就输出了一句话 复制项目的目录 先cd进入复制的这个 ...
- Jmeter之插件安装
在实际工作中,会用到一些额外的jmeter插件,现在描述其插件的安装. 一.下载plugins-manager.jar 在官网中下载plugins-manger.jar,方便后续其他插件的安装,下载地 ...
- allure2生成html报告
前言 allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面. 环境准备 1. ...