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



