为何MySQL 8.0开始取消了查询缓存

news/2024/10/30 19:30:23/

官方文档说明:MySQL :: MySQL 8.0: Retiring Support for the Query Cache

MySQL查询缓存是查询结果缓存。它将以SEL开头的查询与哈希表进行比较,如果匹配,则返回上一次查询的结果。

进行匹配时,查询必须逐字节匹配,例如 SELECT * FROM t1; 不等于select * from t1;此外,一些不确定的查询结果无法被缓存,任何对表的修改都会导致这些表的所有缓存无效。

8.0撤销查询缓存

MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始彻底没有这个功能了。

你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。

但是大多数情况下建议不要使用查询缓存,为什么呢?因为查询缓存往往弊大于利。

  • 查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。
  • 对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次。
  • 比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。

最佳案例

正如我几年前在个人博客上写的:

查询缓存的理想使用场景往往在很大程度上是只读的,这个场景下,通过非常大的代价去检查数百万行数据,但是指返回很少的结果 一个假设出的例子是可能有一个复杂的查询来得到一个网页上的表单中的下拉列表的值,在这种情况下,查询缓存可以掩盖由于缺少的索引引起的查询性能问题,这对新手用户有帮助。

因此,适用于查询缓存的最理想的方案是只读,特别是需要检查数百万行后仅返回数行的复杂查询。如果你的查询符合这样一个特点,开启查询缓存会提升你的查询性能。

随着技术的进步,经过时间的考验,MySQL的工程团队发现启用缓存的好处并不多。

主要原因

首先,查询缓存的效果取决于缓存的命中率,只有命中缓存的查询效果才能有改善,因此无法预测其性能。

其次,查询缓存的另一个大问题是它受到单个互斥锁的保护。在具有多个内核的服务器上,大量查询会导致大量的互斥锁争用。

通过基准测试发现,大多数工作负载最好禁用查询缓存(5.6的默认设置):query_cache_type = 0

如果你认为会从查询缓存中获得好处,请按照实际情况进行测试。

  • 数据写的越多,好处越少
  • 缓冲池中容纳的数据越多,好处越少
  • 查询越复杂,扫描范围越大,则越受益

 


http://www.ppmy.cn/news/48094.html

相关文章

Android:usb转232串口通信

准备工作 首先得adb进入盒子root模式,将/dev/ttys1这个文件改为777,使得所有用户可操作 adb root adb remount adb shell 进入设备的root模式,执行 chmod 777 /dev/ttys1 执行完成后退出 exit 再执行 adb shell chmod 666 /dev/ttyS1 如…

比较运算符、关键字子查询MySQL数据库 (头歌实践教学平台)

文章目的初衷是希望学习笔记分享给更多的伙伴,并无盈利目的,尊重版权,如有侵犯,请官方工作人员联系博主谢谢。 目录 第1关:带比较运算符的子查询 任务描述 相关知识 子查询 带比较运算符的子查询 编程要求 第2关…

第二章 法的内容与形式

目录 第一节 法的内容与形式的概念 一、法的内容与形式的含义 二、法的内容和形式的关系 第二节 法律权利与法律义务 一、权利和义务的概念 二、权利和义务的分类 三、权利与义务的联系 第三节 法的成文形式与不成文形式 一、历史上各种法的表现形式 二、成文法与不成文…

Vue中组件传值

Vue官网链接-向子组件传递数据 Vue官网-Prop 父组件将值传递给子组件 父组件中的值可以通过v-bind与子组件中的props属性将值传递给子组件,也可以通过v-on与this.$emit()间接被子组件中的函数调用 1、使用v-bind将父组件中data中的键与子组件中的props键进行绑定 …

【SpringBoot】一:SpringBoot的基础(下)

文章目录 1.外部化的配置1.1 配置文件基础1.1.1 配置文件格式1.1.2 application文件1.1.3 application.properties1.1.4 application.yml1.1.5 environment1.1.6 组织多文件1.1.7多环境配置 1.2 绑定Bean1.2.1 简单的属性绑定1.2.2 嵌套Bean1.2.3 扫描注解1.2.4 处理第三方库对…

Vue中mixins(混入)的介绍和使用

什么是Mixin? 想要使用一个事物或者工具,我们首要先了解它是什么,这样我们才好对症下药。 其实Mixin不是Vue专属的,可以说它是一种思想,也可以说它就是混入的意思,在很多开发框架中都实现了Mixin(混入)&a…

异常(throwable)

异常 异常分类 (1)Throwable类 所有的异常类型都是它的子类,它派生两个子类Error、Exception。 (2)Error类 表示仅靠程序本身无法恢复的严重错误(内存溢出动态链接失败、虚拟机错误)&#…

Seata强一致性事务模式XA的设计理念

承接上文分布式事务Seata-AT模式 XA规范是什么? 是分布式事务处理DTP(Distributed Transaction Processing)的标准。是描述全局的事务管理器和局部的资源管理器之间的接口规范。允许多个资源(如数据库、应用服务、消息队列)在同…