高级讲解MySQL查询缓存优化
MySQL查询缓存优化 1 概述 2 操作流程 3 查询缓存配置 4 开启查询缓存 5 查询缓存SELECT选项 6 查询缓存失效的情况 (免费学习推荐: mysql视频教程 ) 1、概述 开启Mysql的查询缓存,当执行
<img src="https://img.mryunwei.com/uploads/2023/04/20230419054133558.jpg"><p>MySQL查询缓存优化</p>1 概述2 操作流程3 查询缓存配置4 开启查询缓存5 查询缓存SELECT选项6 查询缓存失效的情况<p>(免费学习推荐:mysql视频教程)</p>
1、概述
开启Mysql的查询缓存,当执行完全相同的SQL语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存。
2、操作流程
1. 客户端发送一条查询给服务器; 2. 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段; 3. 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划; 4. MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询; 5. 将结果返回给客户端。
3、查询缓存配置
MySQL的查询缓存默认是关闭的,需要手动配置参数 query_cache_type , 来开启查询缓存。query_cache_type 该参数的可取值有三个 :
再登录MySQL 此时可再查询MySQL查询缓存是否开启
配置完毕之后,重启服务既可生效 ;
然后就可以在命令行执行SQL语句进行验证 ,执行一条比较耗时的SQL语句,然后再多执行几次,查看后面几次的执行时间;获取通过查看查询缓存的缓存命中数,来判定是否走查询缓存。
我们可以进行测试,我们曾经建了一张表tb_item,里面有250万条数据。
5、查询缓存SELECT选项
可以在SELECT语句中指定两个与查询缓存相关的选项 : SQL_CACHE : 如果查询结果是可缓存的,并且 query_cache_type 系统变量的值为ON或 DEMAND ,则缓存查询结果 。 SQL_NO_CACHE : 服务器不使用查询缓存。它既不检查查询缓存,也不检查结果是否已缓存,也不缓存查询结果。
注意:当 query_cache_type 系统变量的值为ON时,即使不加SQL_CACHE,也是会缓存的,而query_cache_type的变量的值为DEMAND,只有显示的指定了SQL_CACHE,才会做缓存。
tb_item表的前两行信息如下
当我不想要做缓存的时候,我们需要在select后面加上SELECT_NO_CACHE
6、查询缓存失效的情况
我们前面已经提高过,当query_cache_type的值设置为1的时候,它会缓存符合条件的select语句的结果。原因是因为在某些情况下,查询缓存是会失效的。
1) SQL 语句不一致的情况, 要想命中查询缓存,查询的SQL语句必须完全一致。
6) 如果表更改,则使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除。这包括使用MERGE映射到已更改表的表的查询。一个表可以被许多类型的语句,如被改变 INSERT, UPDATE, DELETE, TRUNCATE TABLE, ALTER TABLE, DROP TABLE,或 DROP DATABASE 。