MySQL的查询缓存
什么是查询缓存
MySQL的查询缓存其实就是保存查询返回的完整结果.如果执相同 SQL 语句的时候,并且查询缓存是打开的,则 MySQL 会直接返回结果(在这一过程中 MySQL 还检查了一次用户权限),跳过解析,优化和执行过程.这里判断 SQL 语句是否相同是通过一个对大小写铭感的哈希查找实现的,这就意味着下面两条查询缓存是不同的:
1 | SELECT id FROM t_user; |
简单的了解了一下查询缓存,所以
如何查看查询缓存的相关参数
使用下述命令:
1 | SHOW VARIABLES LIKE '%query_cache%'; |
结果:
其中:
- have_query_cache 查询缓存是否可用
- query_cache_limit 可缓存具体结果的最大值
- query_cache_size 查询缓存的大小
- query_cache_type 阻止或者支持查询缓存
如何查看 SQL 查询在缓存中的命中的累积次数
使用下述命令:
1 | SHOW STATUS LIKE 'Qcache_hits'; |
关于查询缓存
- 当查询语句中有一些不确定的数据时,则不会被缓存。
- 如果表发生变化,那么跟这个表相关的所有的缓存数据都将失效,这里的变化包括:INSERT, UPDATE , DELETE, TRUNCATE, ALTER TABLE 等,由此可见对于频繁更新的表,显然是不适合使用查询缓存的.
- 查询缓存可能可以降低查询时间,但是不能减少查询结果传输的时间消耗,所以是否使用它,需要结合实际情况参考.
对于第一条有如下的简单示例:
1 | SELECT COUNT(id) FROM t_user WHERE post_date >= CURDATE(); // 不会被缓存 |