问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql数据库是默认开启缓存的吗?

发布网友 发布时间:2022-04-22 05:31

我来回答

1个回答

热心网友 时间:2023-09-30 02:01

mysql数据库查询缓存原理是:
概述
查询缓存(Query Cache,简称QC),存储SELECT语句及其产生的数据结果。闲来无事,做一下这块的总结,也做个备忘!
超详细的mysql数据库查询缓存总结,值得收藏

工作原理
缓存SELECT操作的结果集和SQL语句,key为sql,value为查询结果集;
如果新的SELECT语句到了,以这个sql为key去缓存中查询,如果匹配,就把缓存的结果集返回;
匹配标准:与缓存的SQL语句是否完全一样,sql中字母区分大小写以及中间的空格,简单理解为存储了一个key-value结构,key为sql,value为sql查询结果,匹配时使用Java的String的equals(),例如:
select age from user 与 select AGE from user不会匹配,因为大小写不同;
select age from use 与 select age from user不会匹配,因为空格不同;
sql两边的空格可忽略,可以认为是对key进行过trim操作之后再进行equals比较。
查看mysql设置参数
执行
show variables like '%query_cache%';

可以看到相关参数:
query_cache_type:0-不启用查询缓存;1-启用,2-启用,默认值为0;
query_cache_size:设置缓存区总大小,允许设置query_cache_size的值最小为40K,默认1M,推荐设置为:64M/128M;
query_cache_limit:*缓存区最大能缓存的单条查询记录集大小,默认设置为1M
query_cache_type为1时,只要符合查询缓存的要求,客户端的查询语句和记录集都可以缓存起来,如果SQL中加上 SQL_NO_CACHE将不缓存;
query_cache_type为2时,只要SQL中添加了参数:SQL_CACHE,且符合查询缓存的要求,客户端的查询语句和记录集,则可以缓存起来。
查看缓存使用情况
show status like '%Qcache%%';
可以看到相关参数:
Qcache_hits:缓存命中次数;
Qcache_inserts:缓存中插入次数,每缓存一次加1,注意这个不是缓存数量;
开启查询缓存
设置选项query_cache_type = 1 ,同时设置query_cache_size = 67108864;
注:query_cache_size的值设置在100MB以内即可。在MySQL里查询缓存是由一个全局锁在控制,每次更新查询缓存的内存块都需要进行锁定。
关闭查询缓存
设置选项query_cache_type = 0,同时设置query_cache_size = 0。
适用场景
用于频繁提交同一个语句,并且该表数据变化不是很频繁的场景,例如一些静态页面,或者页面中的某块不经常发生变化的信息。
由于查询缓存需要缓存最新数据结果,因此表数据发生任何变化(insert、update、delete或其他可能产生数据变化的操作),都会导致查询缓存被刷新。因而,对于一个更新频率非常低而只读查询频率非常高的场景下,打开查询缓存还是比较有优势的。
不适用场景
查询缓存严格要求2次SQL请求要完全一样,包括SQL语句,连接的数据库、协议版本、字符集等因素都会影响。下面为查询缓存不适用的几个场景:
子查询;
过程、函数、触发器、event中调用的SQL,或者引用到这些结果的;
查询中涉及一些特殊函数时,例如:BENCHMARK()、CURDATE()、CURRENT_TIME()、CURRENT_TIMESTAMP()、NOW()、SLEEP()、CONNECTION_ID()、CURRENT_DATE()、CURRENT_USER()、PASSWORD()、RAND()、UUID()、ENCRYPT()、LAST_INSERT_ID()等等;
查询涉及到mysql,information_schema或performance_schema。
类似SELECT?LOCK IN SHARE MODE、SELECT?FOR UPDATE、SELECT..INTO OUTFILE/DUMPFILE、SELECT * FROM ... WHERE autoincrement_col IS NULL的查询;
SELECT执行计划用到临时表;
未引用任何表的查询,例如SELECT 1+2;
查询产生了告警(warnings);
SELECT语句中存在SQL_NO_CACHE关键字;
涉及到分区表。
更多相关免费学习推荐:mysql教程(视频)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 牛肉怎么分横纹 如何清理mysql数据库缓存数据? 如何分辨真牛肉和假牛肉? 什么是cache数据库? 切牛肉时需要按照牛肉的纹理切吗?怎么看纹理? 怎样清理mysql数据库的缓存 怎么分辨牛肉真假 牛肉切法图解 纹路 对数据库中的数据进行缓存是一次性全部取出还是按需 ORACLE 数据库缓冲区缓存与共享池SQL查询和PL/SQL... 熟牛肉的纹路怎么看? 怎样用数据库缓存,也就是只有当指定的表发生变化的... 请问如何看牛肉的纹路? 启用数据库字段缓存有什么好处 为什么说缓存相当于一个数据库 碎头发太多怎么办?软化可以吗 怎么实现redis的数据库的缓存? 数据库缓冲区概念,作用,以及查看工具 碎头发多适合什么中长发发型 哪位了解java数据缓存技术有哪些 sql数据库的缓存清理办法? 牛肉的纹理怎么切看图解 牛肉纹理怎么切看图解 如何辨别假牛肉 苏大强经典台词有哪些? 你知道苏大强经典台词是什么吗? 《都挺好》苏大强不洗澡经典台词是怎么样的? 苏大强的经典语录大合集,这是你永远都得不到的爸... 苏大强的精彩片段有哪些? 《都挺好》中苏大强是怎么一步步走进保姆设下的陷... 苏大强爱情扑街启示录:糟老头子为何总是爱上小保姆? 苏大强被保姆轰走后欲跳河,老年人到底有什么子女... 都挺好:为什么百般挑剔的苏大强对保姆小蔡如此的... 苏大强要和保姆结婚是第几集 《都挺好》中的保姆真的是为了骗苏大强的钱吗?生... 46岁因戏走红,戏中是苏大强的保姆,戏外美得认不... 《都挺好》中,保姆小蔡是凭借什么俘获苏大强心的? 《都挺好》中苏大强要跟保姆结婚,遭到反对,长辈... 苏大强和保姆小蔡分手哪一集 苏大强和保姆的结局