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

mysql innodb 怎么缓存数据的原理

发布网友 发布时间:2022-04-27 08:25

我来回答

2个回答

懂视网 时间:2022-04-07 19:14

mysql数据库查询缓存原理是:

概述

查询缓存(Query Cache,简称QC),存储SELECT语句及其产生的数据结果。闲来无事,做一下这块的总结,也做个备忘!

超详细的mysql数据库查询缓存总结,值得收藏

c00a8b5d7b85e965230cf5246b53fc9.png

工作原理

  • 缓存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%';

    6d5138e72bf4691d410fa85277cd7c7.png

    可以看到相关参数:

  • 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%%';

    e8253b9bd7cdfca553dc0c1f2c46afe.png

    可以看到相关参数:

  • 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教程(视频)

    热心网友 时间:2022-04-07 16:22

    1、query_cache_size=0 已经禁用了查询缓存,但表数据可能缓存了,flush tables试试,不过操作系统还有一个硬盘缓存,想跟第一次查询之前的状态一致恐怕只能每次重启 2、group by与order by不会用索引的,索引最大的用处就是减小磁盘IO,
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    水笔在手上画画会不会被衣服搽掉下来 老人每天大便次数很多量不多也不稀,每天还会拉三四次水应经三个月了... 从大连飞机场怎么去大连经济开发区5彩城K区的大连金港大酒店 除了打 ... 请问从大连周水子国际机场到经济技术开发区怎么走最省钱? 中国古代名刀总录中国古代十大名刀 怎样把qq安装到iphone里面 苏科大什么梗 苏科大叫什么名字 lol苏科大是苏州科技大学的吗 lol苏州科技大学为什么这么厉害 优尔精医用降温贴是不是保健品? mysql报错64tb innodb的问题,update无效 关于MYSQL配置文件中innodb_flush_log_at_trx_commit的疑问 花菜除了做成干锅花菜,还有什么别的做法吗? 菜花功效作用? 菜花都有什么做法? 花菜有什么做法呀? 街头霸王4迅雷下载 街头霸王4pc版下载 街头霸王4游戏下载 谁能告诉我苹果手机哪里下的了以前大型游戏街机的街头霸王? 12人街头霸王在哪里可以下载 菜花的做法有哪些? 请问街头霸王4游戏在哪可以下载 谁知道《街头霸王4》在哪下载?怎样下载? 单机游戏街霸4在那里下载? 哪些app可以下载93街头霸王 银行黑名单是什么意思 手机怎么设置可以拒接所有来电 京东供应商注册显示企业注册信息已达注册账号上限 京东小金库注册时提醒该手机已被注册过 为何我在京东注册成功之后,商品的优惠卷就不见了? MySQL数据库恢复(InnoDB) MYSQL 5.6 X86 如何修改 innodb_flush_log_at_trx_commit? 支付宝热线电话是多少 《中国梦,青年志》国旗下讲话的1000字左右 四分钟演讲稿 少年志 中国梦 关于中国梦,青春进行时的演讲稿 中国梦,青春梦 演讲稿 中国梦的演讲稿, 江米稀饭熬多长时间 演讲稿一青春中国 江米粽子煮多长时间能熟 江米能熬粥吗 江米煮粥有什么好处 江米一般怎样吃呀 蒸米饭,用江米,水米比例多少合适? 我想知道江米的做法?!直接放谁里熬粥吗? 此描述文件未签名描述文件已被锁定此描述文件一经安装则无法移 已经安装彻底的描述文件无法删除怎么办? ALEBLE熊果苷身体乳在哪个软件买好 3%~5%氢醌霜,0.1%维A酸软膏,3%~5%熊果苷霜,20%壬二酸霜,1%曲酸霜等,去哪买