MySQL的缓存功能,在开启时,执行相同的SQL查询语句时,会直接中获取结果集返回,当数据被修改,删除,新增等操作后, 缓存被清除.
1 MySQL语句执行的流程
1 客户端向服务端发起查询, 将查询SQL发给MySQL服务器.
2 服务器先查看缓存中是否存在,缓存命中,则直接返回.
3 服务器进行SQL解析,预处理,再由优化器生成对应的执行计划.
4 MySQL根据执行计划,调用相应的存储引擎API来执行查询.
5 将结果返回给客户端.
2 MySQL常见缓存参数
以本地MySQL数据库为例, 使用navicat连接工具,或者命令行连接mysql
1 查看数据库是否有缓存功能
show variables like 'have_query_cache';
2 查看数据库是否开启缓存功能
show variables like 'query_cache_type';
3 查看缓存的大小
show variables like 'query_cache_size';
4 查看缓存的常见变量
show status like 'Qcache%';
参数 | 含义 |
---|
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表对象:
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');
再次查看,发现直接从缓存中获取.
|