MySQL 8.0 为什么会放弃查询缓存?
什么是查询缓存?
查询缓存就是将一次查询结果存储在内存中,假如下一次查询结果在内存中,就直接在内存中读取。
设计初衷
当然是提高性能,通过缓存来减少解析器、优化器、存储引擎的执行时间。
MySQL查询缓存原理
MySQL查询缓存是一个查询结果缓存。它将以SEL开头的传入查询与哈希表进行比较,如果匹配,则返回上一次执行查询的结果。
就是将查询SQL进行Hash处理,然后将结果存进内存,假如第二次查询SQLHash值存在,那么直接从内存中读取,加快查询的速率。
那为什么MySQL要放弃查询缓存?
Although MySQL Query Cache was meant to improve performance, it has serious scalability issues and it can easily become a severe bottleneck.
尽管MySQL查询缓存旨在提高性能,但它存在严重的可扩展性问题,很容易成为严重的瓶颈。
- 对于
Select * from stu
与select * from stu
由于Hash的结果不同,所以查询缓存不会被命中,对于复杂的业务场景这种情况可能会大量发生。 - 查询缓存会在表增删改的情况下失效,所以查询缓存适合读多写少的场景,QueryCache理想的场景往往是只读的。
- 对于表分区默认查询缓存关闭。
- 对于未命中缓存的Sql,会进行数据写入,官方统计会消耗13%的资源。
- 对于某些的函数,查询缓存也不会生效,比如now()
综上所述,查询缓存可能会成为MySQL的瓶颈,所以官方选择删除。
那我们需要使用查询缓存怎么办?
官方推荐了性能更好的第三方客户端ProxySQL,如果有需要可以自己研究使用。
优质博客推荐:https://blog.csdn.net/wtopps/article/details/127733437
参考:https://dev.mysql.com/blog-archive/mysql-8-0-retiring-support-for-the-query-cache/
本文来自博客园,作者:帅气的涛啊,转载请注明原文链接:https://www.cnblogs.com/handsometaoa/p/17005675.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)