关于MySQL的查询缓存(Query Cache)

先说概念:

MySQL 的查询缓存(Query Cache)是一种在服务层级别缓存查询结果的机制。当一个查询被执行时,MySQL 会将查询语句其对应的结果存储在内存中的查询缓存中。如果后续有相同的查询请求到达,MySQL 可以直接从缓存中返回结果,而无需再执行实际的查询操作,从而提供快速的查询响应。

根据其特性,查询缓存的使用可以带来以下几点好处:
1、加速查询响应:如果一个查询在缓存中已经存在,并且查询缓存是启用的,MySQL 可以立即返回之前查询的结果,而无需再次访问底层数据表,从而显著提高查询性能和响应速度。
2、减少CPU和IO开销:通过避免重复执行相同的查询,查询缓存可以减少数据库服务器的 CPU 和 IO 负载,允许处理更多的并发查询请求。

弊端

但是查询缓存也存在一些限制和注意事项:
1、缓存失效成本高:当任何一个表发生增删改操作时,与该表相关的所有缓存都被标记为无效,并在下次查询时被清除。对于频繁进行写操作或更新的表,缓存命中率可能很低,甚至会成为一种性能负担。
2、不适用于大多数动态或复杂查询:查询缓存只适用于完全相同的查询,如果查询中包含任何变量、函数、子查询、临时表或用户定义函数,则无法从缓存中获益。
3、占用内存:查询缓存需要占用一部分内存来存储查询语句和结果,过大的查询缓存可能导致内存压力,并且可能会影响其他重要的数据结构,如连接池或数据库缓冲池。

从诞生到淘汰

其实MySQL在很早期的版本中就引入的查询缓存,甚至可以追溯到2000年代。
那时候互联网还没有很成熟,数据量也远远没有现在炸裂,甚至绝大多数用MySQL的业务都不需要挂一层Redis,所以MySQL自身搞了个查询缓存,目的应该是想如果一些数据被频繁查询则直接走缓存。
但是自 MySQL 5.7.20 版本开始,MySQL 默认将查询缓存功能禁用。在使用 MySQL 8.0 或更高版本时,查询缓存已经被完全移除
为什么查询缓存在MySQL中就走到头了呢,原因有几个:
1、MySQL终归是适合做逻辑、事务处理的数据库。当互联网逐渐成熟,数据量越来越爆炸时,自然就诞生出了Redis这种KV适合做缓存场景的数据库,相较使用MySQL专门分出一块内存来做查询缓存,明显Redis更加高效和稳定。
2、查询缓存本身。在MySQL中查询缓存的实现方式是必须完全相同的SQL才会触发使用到查询缓存,这点就使得MySQL中的查询缓存功能非常鸡肋了,再不济select a from t where id=xxx 每个用户查的都不是同一个id嘛。

所以综合来看MySQL中的查询缓存劣势远远大于优势,被时代淘汰也理所当然了。


免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论