【mysql】八、mysql的学习---查询缓存

mysql的学习

资料来源 https://www.bilibili.com/video/BV1CZ4y1M7MQ?from=search&seid=3518646188262100291

一、索引:【mysql】一、mysql的学习---索引

二、视图:【mysql】二、mysql的学习---视图

三、存储过程和函数:【mysql】三、mysql的学习---存储过程和函数

四、触发器:【mysql】四、mysql的学习---触发器

五、存储引擎:【mysql】五、mysql的学习---存储引擎

六、SQL优化:【mysql】六、mysql的学习---SQL优化

七、应用优化:【mysql】七、mysql的学习---应用优化

八、查询缓存:【mysql】八、mysql的学习---查询缓存

九、内存优化:【mysql】九、mysql的学习---内存优化

十、Mysql并发参数调整和锁: 【mysql】十、mysql的学习---Mysql并发参数调整和锁

十一、常用的SQL技巧:【mysql】十一、mysql的学习---常用的sql技巧

本篇文章主要介绍 查询缓存 的相关知识

1. 概述

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

2. 操作流程

-- 1. 客户端发送一条查询给服务器。
-- 2. 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段。
-- 3. 服务器端进行sql解析、预处理,再由优化器生成对应的执行计划。
-- 4. mysql根据优化器生成的执行计划,调用存储引擎的API来执行查询。
-- 5. 将结果返回给客户端。

 

3. 查询缓存配置

-- 1.查看当前的mysql数据库是否支持查询缓存:
show variables like 'have_query_cache';

-- 2.查看当前mysql是否开启了查询缓存:
show variables like 'query_cache_type';

-- 3.查看查询缓存的占用大小:  可以扩展 但是最好是1024的倍数 ,比如图中的1048576 = 1024*1024*1 即1M
show variables like 'query_cache_size';

-- 4.查看查询缓存的状态变量:
show status like 'Qcache%'

4. 开启查询缓存

-- mysql的查询缓存默认是关闭的,需要手动配置参数query_cache_type,来开启查询缓存。query_cache_type该参数的可取值有三个:

-- 在/usr/my.cnf配置中,增加以下配置:query_cache_type=1

-- 配置完毕之后,重启服务即可生效;然后就可以在命令行执行sql语句进行验证,执行一条比较耗时的sql语句,然后再多执行几次,查看后面几次的执行时间;获取通过查看查询缓存的缓存命中数,来判定是否走查询缓存。

5. 查询缓存select选项

-- 可以在select语句中指定两个与查询缓存相关的选项:
-- SQL_CACHE:如果查询结果是可缓存的,并且query_cache_type系统变量的值为on或demand,则缓存查询结果。
-- SQL_NO_CACHE:服务器不使用查询缓存。它既不检查查询缓存,也不检查结果是否已缓存,也不缓存查询结果。
-- 例子:

select SQL_CACHE id,name from customer;

select SQL_NO_CACHE id,name from customer;

6. 查询缓存失效的情况

-- 1.sql语句不一致的情况,要想命中查询缓存,查询的sql语句必须一致
sql1: select count(*) from user;
sql2: Select count(*) from user;
-- 2.当查询语句中有一些不确定的时,则不会缓存。如:now(),current_date(),curdate(),rand(),uuid()等
sql1:select * from user where uptime < now() limit 1;
sql2:select user();
sql3:select database();
-- 3.不使用任何表查询语句
select 'A';
-- 4.查询mysql,infomation_schema或performance_schema数据库中的表时,不会走查询缓存
select * from infomation_schema.engines;
-- 5.在存储函数,触发器或者事件的主体内执行的查询
-- 6.如果表更改,则使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除。这包括使用merge映射到已更改表的表的查询。一个表可以被许多类型的语句,如被改变insert、update、delete、truncate table、alter table、drop table、drop database

持续更新!!!

原文地址:https://www.cnblogs.com/flyinghome/p/14722865.html