MySQL的缓存使用

MySQL的缓存功能,在开启时,执行相同的SQL查询语句时,会直接中获取结果集返回,当数据被修改,删除,新增等操作后, 缓存被清除.

1 MySQL语句执行的流程

image-20211005094445574

1 客户端向服务端发起查询, 将查询SQL发给MySQL服务器.

2 服务器先查看缓存中是否存在,缓存命中,则直接返回.

3 服务器进行SQL解析,预处理,再由优化器生成对应的执行计划.

4 MySQL根据执行计划,调用相应的存储引擎API来执行查询.

5 将结果返回给客户端.

2 MySQL常见缓存参数

以本地MySQL数据库为例, 使用navicat连接工具,或者命令行连接mysql

1 查看数据库是否有缓存功能
show variables like 'have_query_cache';

image-20211005100613907

2 查看数据库是否开启缓存功能
show variables like 'query_cache_type';

image-20211005100701150

3 查看缓存的大小
show variables like 'query_cache_size';

image-20211005100747169

4 查看缓存的常见变量
-- %表示模糊查询
show status like 'Qcache%';

image-20211005100809541

参数含义
Qcache_free_blocks缓存的可用内存块数
Qcache_free_memory缓存的可用内存量
Qcache_hits缓存命中数
Qcache_inserts缓存的查询数
Qcache_lowmen_prunes因内存不足而从查询缓存中删除的查询数
Qcache_not_cached非缓存查询的数量
Qcache_queries_in_cache缓存中注册的查询数
Qcache_total_blocks缓存中的块总数

3 测试缓存查询

新建一个user表对象:

-- 创建user表
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `name` varchar(30) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`),
  KEY `index_age` (`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 添加数据
INSERT INTO `test`.`user`(`id`, `name`, `age`, `email`) VALUES (1, 'Jone', 1, 'test1@baomidou.com');
INSERT INTO `test`.`user`(`id`, `name`, `age`, `email`) VALUES (2, 'Jack', 20, '5%st2@baomidou.com');
INSERT INTO `test`.`user`(`id`, `name`, `age`, `email`) VALUES (3, 'Tom', 28, '5est3@baomidou.com');
INSERT INTO `test`.`user`(`id`, `name`, `age`, `email`) VALUES (4, 'Sandy', 21, '5$1111@qq.com');

image-20211005185117155
再次查看,发现直接从缓存中获取.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值