众所周知,MySQL在8.0版本中取消了查询缓存Query Cache。但是,为什么MySQL放弃了这个查询缓存呢?接下来我们为大家详细解答。
首先,查询缓存是指查询结果缓存,可以将以SEL开头的查询与哈希表进行比较,如果匹配,则返回上一次查询的结果。然而,这种方法只有命中率高的查询结果才能起到优化效果,因此无法预测其性能。另外,在具有多个内核的服务器上,大量查询会导致大量的互斥锁争用,也就是说,查询缓存效果好坏是取决于多个因素的。
其次,查询缓存还存在一些限制,在表进行修改时所有相关缓存都会被清空,因此适用于只读查询的情况。我们需要根据实际情况来测试,以确定是否适合使用查询缓存。数据写的越多,缓冲池中容纳的数据越多,查询越复杂,扫描范围越大,则适用查询缓存的效果可能越小。
此外,随着技术的进步,MySQL的工程团队发现启用查询缓存的好处并不多,甚至有时候相反。
综合以上原因,MySQL在8.0版本中取消了查询缓存。当然,MySQL的工程团队也在8.0版本中新增了一些性能干预的工具,例如,可以利用查询重写插件,在不更改应用程序的同时,插入优化器提示语句。此外,还有像ProxySQL这样的第三方工具,可以充当中间缓存。因此,考虑从5.7版本升级至8.0时,建议使用查询重写或其他缓存进行替代。
总之,MySQL取消查询缓存是出于一系列原因和技术考虑,并不代表查询缓存没有任何优势。而用户对于是否使用查询缓存,需要根据实际情况进行综合考虑和测试,以确定是否适合使用。