MySQL数据库缓存

本文介绍了在性能测试中遇到的通讯录获取效率问题,提出通过开启MySQL查询缓存作为优化方案。详细讲述了如何配置my.cnf以启用缓存,并提供了检查缓存设置和状态的命令。还讨论了开启缓存后的影响,包括关联表变化导致的缓存失效以及如何通过SQL_CACHE和SQL_NO_CACHE控制缓存使用。建议在变化频率低的表上谨慎使用查询缓存以提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       近期公司性能测试时,发现通讯录获取效率较低,主要原因还是数据未进行分页而且数据量过大导致,但是作为一种优化方案,还是提出了开启MySQL查询缓存的方案:

1.  在my.cnf中添加如下配置并重启,开启MySQL缓存

query_cache_size=256M
query_cache_limit=10M
query_cache_type=1
  •  query_cache_size为总缓存大小,官方推荐不要超过256M
  •  query_cache_limit为单条查询结果的最大缓存大小,如不设置,默认为1M
  •  query_cache_type表示缓存方式,0表示不开启缓存,1表示每条语句都开启缓存(除非指定不需要缓存),2表示如果查询语句中指定使用缓存,则进行缓存,具体见后续说明。

2.  开启完毕后,进入MySQL命令行,输入如下命令确认各参数是否设置正确:

show variables like '%query_cache%';

3.  可用如下命令确认缓存状态:

show status like 'Qcache%';

4.  重置缓存内容:

reset query cache;

除了上述简单开启外,额外说明如下:

  1. 开启缓存后,MySQL会根据查询语句与关联表进行查询结果的缓存,一旦关联表发生变化,就会使缓存内容失效;
  2. 虽然没有试验,但据说开启缓存应该是对相关表的插入更新效率是有一定影响的;
  3. 如前所述,query_cache_type=2时,只缓存明确需要缓存的SQL查询(在SELECT后加上SQL_CACHE),这样可以避免滥用缓存, 根据实际需要进行优化;当query_cache_type=1时,也可以通过SQL_NO_CACHE来关闭查询缓存。具体方式如下:
SELECT SQL_CACHE ... FROM ... WHERE ...
SELECT SQL_NO_CACHE ... FROM ... WHERE ...

       总的说来,在部分变化频率较低的表对应的查询语句中,开启Query Cache,对性能会有一定提升,其余情况下,个人感觉还是尽量少用,遇到问题再优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值