MySQL查询缓存
2016-01-31 11:06 abce 阅读(594) 评论(0) 编辑 收藏 举报查询缓存存储sql语句和对应的发送给客户端的结果。执行相同的sql语句时,mysql server会直接从查询缓存中检索结果,不再需要对sql语句进行解析和执行。查询缓存在session之间是可以共享的。
查询缓存适用于表修改不是很频繁,频繁执行相同查询的环境。不适合表经常更新的表。
查询缓存不会存过期的数据。当表被修改后,查询缓存中的数据会被刷出。
在MySQL 5.6.5中,查询缓存不支持分区表,涉及到分区表的查询时会自动取消查询缓存功能。
查询缓存的工作原理
在解析sql语句前,会将客户端发送的sql请求跟查询缓存中的sql进行比较。以下两个sql语句在查询缓存中是不同的:
select * from tab1_name;
SELECT * FROM TAB1_NAME;
必须是相同的sql语句。此外,由于其他原因,sql查询字符串相同也可能会被当做不同的sql语句。查询不同的数据库、使用不同的协议版本、或者不同的字符集时,相同的sql语句也会被单独缓存。
查询缓存不适用以下场景:
-外查询的子查询
-function、trigger或event内部的查询
查询缓存被命中后,会将Qcache_hits的值进行自增。
如果表发生了变化,比如执行了insert, update, delete, truncate table, alter table, drop table, o或drop database操作,所有缓存的查询结果都会变得无效,并被移出查询缓存。
对视图的查询也会被缓存。
SQL语句开启/取消查询缓存功能:
1 2 | SELECT SQL_CACHE id, name FROM customer; # "SQL_CACHE" 使用查询缓存 SELECT SQL_NO_CACHE id, name FROM customer; # "SQL_NO_CACHE" 不使用查询缓存 |
查看mysql server查询缓存是否可用:
1 2 3 4 5 6 | mysql> show variables like 'have_query_cache' ; + ------------------+-------+ | Variable_name | Value | + ------------------+-------+ | have_query_cache | YES | + ------------------+-------+ |
关闭查询缓存:建议把查询缓存关闭掉,有个全局锁效率不高
1 2 | query_cache_type = 0 query_cache_size = 0 |
设置查询缓存时,query_cache_size的值不得小于40k(用于分配自身结构)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | mysql> set global query_cache_size=4000; Query OK, 0 rows affected, 2 warnings (0.00 sec) mysql> show warnings\G *************************** 1. row *************************** Level : Warning Code: 1292 Message: Truncated incorrect query_cache_size value: '4000' *************************** 2. row *************************** Level : Warning Code: 1282 Message: Query cache failed to set size 3072; new query cache size is 0 2 rows in set (0.00 sec) mysql> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)