mysql 技巧 * 查询缓存

概述

MySQL 服务收到到查询请求时,会先在内存中找是否有完全一致的查询语句数据,有直接返回,无才经过一系列步骤查询数据,注意是语句完全一致才可能被查询缓存命中。

如下:

  1. SELECT * FROM tbl
  2. SELECT * from tbl

这两条语句因 FROM 和 from 不同而被视为不同的查询。

开启

# have_query_cache  是否支持查询缓存,MySQL8之后不支持查询缓存了
SHOW VARIABLES LIKE 'have_query_cache';  
# query_cache_type	是否已开启查询缓存,MySQL5.6之后默认关闭
SHOW VARIABLES LIKE 'query_cache_type';

# 开启
>>> vim /etc/my.cnf
# 在[mysqld]下添加:
query_cache_size = 20M
query_cache_type = ON
# 重启 mysqld

测试

SELECT * FROM users WHERE id = 1;

第一次执行:

可见 Qcache_hits(缓存命中数): 0,Qcache_inserts(插入缓存数):1,再次执行完全相同的语句:

可见 Qcache_hits(缓存命中数): 1,Qcache_inserts(插入缓存数):0,查询缓存被命中

扩展:

0. 查询缓存的总体使用情况

SHOW STATUS LIKE 'qcache%';  

1. 执行不查询缓存的语句

SELECT SQL_NO_CACHE * FROM users WHERE id = 1;

2. 清除缓存

RESET QUERY CACHE

3. 查询缓存失效

在表的结构或数据发生改变时,查询缓存中的数据不再有效。所以查询缓存适合有大量相同查询的应用,不适合有大量数据更新的应用。

4. 为什么MySQL5.6之后默认关闭查询缓存,MySQL8之后甚至移除此功能?

MySQL 服务器团队:缓存建议使用MySQL外部一些数据库如Redis/Memcache等,效率会更高。

参考:https://mysqlserverteam.com/mysql-8-0-retiring-support-for-the-query-cache/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值