查询缓存存储SELECT查询的文本以及发送给客户端的相应结果。如果随后收到一个相同的查询,服务器从查询缓存中重新得到查询结果,而不再需要解析和执行查询。
如果你有一个不经常改变的表并且服务器收到该表的大量相同查询,查询缓存在这样的应用环境中十分有用。对于许多Web服务器来说存在这种典型情况,它根据数据库内容生成大量的动态页面。
注释:查询缓存不返回旧的数据。当表更改后,查询缓存值的相关条目被清空。
注释:如果你有许多mysqld服务器更新相同的MyISAM表,在这种情况下查询缓存不起作用。
注释:查询缓存不适用于服务器方编写的语句。如果正在使用服务器方编写的语句,要考虑到这些语句将不会应用查询缓存。参见 25.2.4节,“C API预处理语句”。
下面是查询缓存的一些性能数据。这些结果是在Linux Alpha 2 x 500MHz系统(2GB RAM,64MB查询缓存)上运行MySQL基准组件产生的。
· 如果执行的所有查询是简单的(如从只有一行数据的表中选取一行),但查询是不同的,查询不能被缓存,查询缓存激活率是13%。这可以看作是最坏的情形。在实际应用中,查询要复杂得多,因此,查询缓存使用率一般会很低。
· 从只有一行的表中查找一行数据时,使用查询缓存比不使用速度快238%。这可以看作查询使用缓存时速度提高最小的情况。
服务器启动时要禁用查询缓存,设置query_cache_size系统变量为0。禁用查询缓存代码后,没有明显的速度提高。编译MySQL时,通过在configure中使用--without-query-cache选项,可以从服务器中彻底去除查询缓存能力。