MySQL开启查询缓存

2025-02-18 13:57:53 109

MySQL中的查询缓存能够缓存SELECT查询语句及对应的查询结果信息。如果再次有相同的SELECT语句查询数据,则MySQL会从查询缓存中直接返回的数据,而不必再对SQL语句进行解析、优化和查询等,有效避免了相同的查询时再次读取磁盘上存储的数据,大大提升了数据的查询性能。


在MySQL命令行中查看是否开启查询缓存。

image.png

其中,几个重要的参数说明如下:

·have_query_cache:MySQL在安装时是否配置支持查询缓存。YES表示支持查询缓存;NO表示不支持查询缓存。

·query_cache_size:查询缓存所能容纳的数据大小,也就是查询缓存的容量。

·query_cache_type:查询缓存是否开启。OFF表示关闭查询缓存;ON表示开启查询缓存,但是使用SQL_NO_CACHE提示的SELECT查询语句不会使用查询缓存;DEMAND同样表示开启查询缓存,但是只有使用SQL_CACHE提示的SELECT查询语句才会使用查询缓存。

MySQL命令行不支持开启查询缓存。

MySQL命令行不支持开启查询缓存。


mysql> SET SESSION query_cache_type = ON;ERROR 1651 (HY000): Query cache is disabled; restart the server with query_cache_type=1 to enable it


开启查询缓存需要在MySQL的配置文件my.cnf或者my.ini中进行配置。此时有两种方式开启查询缓存,一种方式是将query_cache_type选项设置为ON,在my.cnf或者my.ini文件中的[mysqld]下进行如下配置:


query_cache_size = 20Mquery_cache_type = ON


接下来重启MySQL服务器即可开启查询缓存。

此时,多次执行如下SQL语句会直接返回查询缓存中的数据,而不必再次查询数据库。


SELECT t_name, t_price, t_category, t_stock FROM t_goods WHERE id = 1;


如果不想直接返回查询缓存中的数据,则可以使用如下SQL语句查询数据。


SELECT SQL_NO_CACHE t_name, t_price, t_category, t_stock FROM t_goods WHERE id = 1;


另一种开启查询缓存的方式是将query_cache_type选项设置为DEMAND,在my.cnf或者my.ini文件中的[mysqld]下进行如下配置:


query_cache_size = 20Mquery_cache_type = DEMAND


同样需要重启MySQL服务器才能生效。

此时,多次执行如下SQL语句才能使用查询缓存。


SELECT SQL_CACHE t_name, t_price, t_category, t_stock FROM t_goods WHERE id = 1;


如果不需要使用查询缓存,则可以执行如下SQL语句。


SELECT t_name, t_price, t_category, t_stock FROM t_goods WHERE id = 1;


注意:当数据表的数据发生变更时,MySQL会清空查询缓存中的相关数据。另外,在MySQL 8.x版本中,查询缓存已经被移除,也就是说在 MySQL 8.x 及更高版本中,无法再使用查询缓存这一特性。这是因为在实际应用中,查询缓存的维护成本较高,特别是在数据频繁变更的场景下,缓存的更新和清理操作会带来额外的性能开销,而且缓存命中率可能并不理想,所以 MySQL 官方决定在新版本中移除该功能。


对于使用低于 8.x 版本 MySQL 的用户来说,在使用查询缓存时也需要谨慎评估。一方面,要根据实际的业务场景和数据特点来合理配置查询缓存的大小和类型。如果业务中存在大量重复的查询,且数据更新频率较低,那么开启查询缓存可以显著提升性能;另一方面,要时刻关注数据表的变更情况,因为每次数据变更都会导致相关缓存数据被清空,频繁的数据变更可能会使查询缓存失去意义。


蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。更多技术知识,蓝队云期待与你一起探索。



提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: