8.10.3 MySQL 查询缓存

Note

从 MySQL 5.7.20 开始,查询缓存已弃用,并在 MySQL 8.0 中删除。

查询缓存将SELECT语句的文本以及发送到 Client 端的相应结果存储在一起。如果以后收到相同的语句,则服务器从查询缓存中检索结果,而不是再次解析并执行该语句。查询缓存在会话之间共享,因此可以响应另一个 Client 端发出的同一查询来发送一个 Client 端生成的结果集。

查询缓存在您的 table 不经常更改且服务器接收许多相同查询的环境中很有用。这是许多 Web 服务器基于数据库内容生成许多动态页面的典型情况。

查询缓存不返回陈旧的数据。修改 table 后,将刷新查询缓存中的所有相关条目。

Note

查询缓存在具有多个mysqld服务器更新同一MyISAMtable 的环境中不起作用。

查询缓存用于第 8.10.3.1 节,“查询缓存的操作方式”中描述的条件下的准备好的语句。

Note

分区 table 不支持查询缓存,而涉及分区 table 的查询将自动禁用查询缓存。无法为此类查询启用查询缓存。

以下是查询缓存的一些性能数据。这些结果是通过在具有 2GB RAM 和 64MB 查询缓存的 Linux Alpha 2×500MHz 系统上运行 MySQL 基准套件而产生的。

要在服务器启动时禁用查询缓存,请将query_cache_size系统变量设置为 0.通过禁用查询缓存代码,没有明显的开销。

查询缓存提供了显着提高性能的潜力,但不要假设它在所有情况下都可以这样做。使用某些查询缓存配置或服务器工作负载,实际上可能会看到性能下降:

为了验证启用查询缓存是否有用,请在启用和禁用缓存的情况下测试 MySQL 服务器的操作。然后定期重新测试,因为查询缓存效率可能随服务器工作负载的变化而变化。

首页