- 工信部备案号 滇ICP备05000110号-1
- 滇公安备案 滇53010302000111
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
MySQL中的查询缓存能够缓存SELECT查询语句及对应的查询结果信息。如果再次有相同的SELECT语句查询数据,则MySQL会从查询缓存中直接返回的数据,而不必再对SQL语句进行解析、优化和查询等,有效避免了相同的查询时再次读取磁盘上存储的数据,大大提升了数据的查询性能。
在MySQL命令行中查看是否开启查询缓存。
其中,几个重要的参数说明如下:
·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 的用户来说,在使用查询缓存时也需要谨慎评估。一方面,要根据实际的业务场景和数据特点来合理配置查询缓存的大小和类型。如果业务中存在大量重复的查询,且数据更新频率较低,那么开启查询缓存可以显著提升性能;另一方面,要时刻关注数据表的变更情况,因为每次数据变更都会导致相关缓存数据被清空,频繁的数据变更可能会使查询缓存失去意义。
售前咨询
售后咨询
备案咨询
二维码
TOP