为什么默认禁用MySQL查询caching?

我有一个很简单的问题

为什么默认禁用MySQL查询caching

在大多数MySQL的打包版本中,我遇到过的默认值是:

query_cache_type = 1 query_cache_size = 0 

这从本质上禁用查询caching默认情况下。

还有许多其他缓冲区和限制,这些缓冲区和限制都设置了合理的默认值。 由于查询caching对应用程序是完全透明的,为什么它被禁用?

我发现自己启用查询caching和缓慢的查询日志,每次我部署一个新的MySQL框,所以只是对默认的逻辑好奇。

它并不总是被默认禁用(这取决于版本和分发器),但是有一个很好的理由:启用查询caching的性能并不总是更好,而且在更大的caching大小下,它实际上可能对caching的性能不利修剪(将用量较less的数据从内存中移出以为新条目腾出空间)需要更长的时间。 当失效和修剪花费的时间超过查询执行的时间时,就会出现严重的问题。

这对于性能问题也不是银弹。 从这里 :

查询caching对于某些应用程序非常适用,通常是在有限的规模上部署的简单应用程序或处理小数据集的应用

默认情况下禁用查询caching的最明显的(警告 – 重要的)原因是分发者偏离可能导致依赖于应用程序的性能问题的设置的潜在威胁。

这里是MySQL查询caching的一个很好的入门