MYSQL入门到精通【8】:mysql语句之慢查询优化

MYSQL入门到精通【8】:mysql语句之慢查询优化

  • 1. 慢查询
  • 2. 数据库缓存
  • 3. 其他优化

1. 慢查询

(1) 基本介绍
查询日志太慢,就开启慢查询来记录

show databases;
use test;
show tables;
use account;

show variables like '%slow%';  # 慢查询,见图①

set global log_slow_queries=on;  # 打开慢查询,见图② 
show variables like '%slow%'; 

图①:慢查询
MYSQL入门到精通【8】:mysql语句之慢查询优化_第1张图片
图②:打开慢查询
MYSQL入门到精通【8】:mysql语句之慢查询优化_第2张图片

show variables like '%long%'; # 查看查询时间

MYSQL入门到精通【8】:mysql语句之慢查询优化_第3张图片

set long_query_time=0.5; # 设置查询时间阈值
show variables like '%long%';

MYSQL入门到精通【8】:mysql语句之慢查询优化_第4张图片

(2) 分析查询慢的方法:profiling

#
desc account;
explain select * from account where pid=361680\G

MYSQL入门到精通【8】:mysql语句之慢查询优化_第5张图片

# 查询慢
explain select * from account where pid=361680\G

MYSQL入门到精通【8】:mysql语句之慢查询优化_第6张图片

#查询快
explain select * from account where account_id=361680\G
# 查询快慢的区别:在 type 和 rows 方面差别较大

MYSQL入门到精通【8】:mysql语句之慢查询优化_第7张图片

show variables like '%profiling%';

set profiling=ON;  # 打开
show variables like '%profiling%'; 

MYSQL入门到精通【8】:mysql语句之慢查询优化_第8张图片

#查询慢
explain select * from account where pid=361680show profiles; 

MYSQL入门到精通【8】:mysql语句之慢查询优化_第9张图片

show profile for query 2;  # 执行操作所有时间

MYSQL入门到精通【8】:mysql语句之慢查询优化_第10张图片

(3) 慢查询优化
关键:where后面的字段加索引

alter table account add index(pid);
explain select * from account where account_id='361680'\G  # pid 是 varchar 型
show profiles;
show profiles for query 17;

MYSQL入门到精通【8】:mysql语句之慢查询优化_第11张图片
MYSQL入门到精通【8】:mysql语句之慢查询优化_第12张图片

2. 数据库缓存

(1) 缓存开启状态

show variables like '%cache%'; # 查看缓存,关闭状态

MYSQL入门到精通【8】:mysql语句之慢查询优化_第13张图片

show status like '%qcache%'; # 查看命中率

MYSQL入门到精通【8】:mysql语句之慢查询优化_第14张图片

set global query_cache_size=10240000;  # 打开缓存
show variables like '%cache%'; 

MYSQL入门到精通【8】:mysql语句之慢查询优化_第15张图片

show status like '%qcache%'; # 查看命中率

MYSQL入门到精通【8】:mysql语句之慢查询优化_第16张图片

select count(*) from account;
select count(*) from account;
# 第二次查询变快了,因为第一次数据缓存了

MYSQL入门到精通【8】:mysql语句之慢查询优化_第17张图片
(2) 关闭缓存状态

set global query_cache_size=0;  
show variables like '%cache%'; # 缓存关闭,默认状态

3. 其他优化

(1) 添加索引

explain select * from account where pid='240691' or passpord='limeiling123'\G

MYSQL入门到精通【8】:mysql语句之慢查询优化_第18张图片

# 添加索引
alter table account add index(passport);
explain select * from account where pid='240691' or passpord='limeiling123'\G

MYSQL入门到精通【8】:mysql语句之慢查询优化_第19张图片
(2) 针对性查询

select * from account where pid='240691' ;  # 查询慢
select pid from account where pid='240691' ;  # 针对性查询,推荐
show profiles;
# 总结: 需要什么字段 就查什么字段

在这里插入图片描述

(3) limit

select pid,passport from account where pid='240691' limit 1 ; 

MYSQL入门到精通【8】:mysql语句之慢查询优化_第20张图片

(4) 字段中不要添加运算

select pid,passport from account where pid+1='240691' ; 
# 说明 不要在字段上加运算

MYSQL入门到精通【8】:mysql语句之慢查询优化_第21张图片
(5) 注意事项
左模糊全模糊不会用索引查询,而右查询可以

你可能感兴趣的:(SQL,mysql,数据库)