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, '[email protected]');
INSERT INTO `test`.`user`(`id`, `name`, `age`, `email`) VALUES (2, 'Jack', 20, '5%[email protected]');
INSERT INTO `test`.`user`(`id`, `name`, `age`, `email`) VALUES (3, 'Tom', 28, '[email protected]');
INSERT INTO `test`.`user`(`id`, `name`, `age`, `email`) VALUES (4, 'Sandy', 21, '[email protected]');

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

Guess you like

Origin blog.csdn.net/ABestRookie/article/details/120617391