MySQL之查询缓存优化

MySQL之查询缓存优化

一 概述

开启MySQL的查询缓存,当执行完全相同的SQL语句时,服务器就会直接从缓存中获取结果,当数据修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存。

二 操作流程

1 客户端发送一条查询SQL给服务器;
2 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果,否则进入下一阶段
3 服务器对SQL进行解析、预处理,再由优化器生成对应的执行计划;
4 MySQL根据执行计划调用存储引擎的API执行查询
5 将结果返回给客户端,并将结果放到缓存中
流程图如下:
在这里插入图片描述

三 查询缓存参数配置

1 查看当前MySQL数据库是否支持查询缓存

SHOW VARIABLES LIKE 'have_query_cache';

在这里插入图片描述
2 查看当前MySQL数据库是否开启了查询缓存

SHOW VARIABLES LIKE 'query_cache_type';

在这里插入图片描述
3 查看查询缓存的占用大小

SHOW VARIABLES LIKE 'query_cache_size';

在这里插入图片描述
4 查看查询缓存的状态变量

SHOW STATUS LIKE 'Qcache%';

在这里插入图片描述
各个变量的含义如下:
在这里插入图片描述

四 开启查询缓存

MySQL查询缓存默认是关闭的,需要手动配置query_cache_type,它的参数有以下三个:
在这里插入图片描述
在/usr/my.cnf配置文件中,增加以下配置:

#开启MySQL的查询缓存
query_cache_type = 1;

配置完保存后需要重启MySQL服务器采用生效。

五 查询缓存的SELECT选项

1 SQL_CACHE:如果重新结果是可缓存的,并且query_cache_type系统变量的值为ON或DEMAND,则 缓存查询结果
2 SQL_NO_CACHE:服务器不使用查询缓存,既不检查查询缓存,也不检查是否缓存,也不缓存查询结果
案例:

SELECT SQL_CACHE id,name FROM customer;
SELECT SQL_NO_CACHE id,name FROM customer;

六 查询缓存失效情况

1 SQL语句不一致的情况,想要命中查询缓存,查询的SQL语句必须一模一样
案例:

select count(*) from t_user;
Select count(*) from t_user;

2 当查询语句中有一些不确定的值时:如now(),current_date(),curdate(),curtime(),rand(),uuid(),user(),database()
案例:

select * from t_user where updatetime < npw() limit 1;
select user();
select database();

3 不使用任何表查询语句
案例:

select 'A';

4 查询mysql,information_schema,performance_schema数据库中的表时,不会走查询缓存

select * from information_schema.engines;

5 在存储的函数,触发器或事件的主体内执行的查询
6 如果表更改,则使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除。这包含使用merger映射到已更改表的查询。若表被改变INSERT, UPDATE, DELETE, TRANCATE TABLE, ALTER TABLE, DROP TABLE, DROP DATABASE,存储缓存会失效。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值