elitechen 2017-05-07
MySQL的查询缓存是我们优化MySQL数据库的一个方向,我们有必要介绍一下,看看MySQL的查询缓存是什么?它是怎么工作的?什么时候不会走查询缓存?以及为什么查询缓存不生效等等问题。
查询缓存是什么
将某个select语句和相应的查询结果缓存起来,如果以后有相同的select语句的话,就直接从查询缓存中读取结果,不需要再执行表查询。
这里指的是同一个select语句。
仅仅对select语句有效。
因为不需要执行表查询,所以更快。
它不会返回过时的数据,如果数据有改变,整个查询缓存将被冲刷。
仅仅适用于以读为主的应用,频繁写应用不适合。
检查MySQL数据库是否支持查询缓存
在命令行登录MySQL服务器之后,执行SHOW VARIABLES LIKE 'have_query_cache'语句就能够看到你的MySQL服务器是否开启了查询缓存,参考下图,如果为yes表示支持查询缓存,否则表示不支持查询缓存,该值有0,1,2三种。
0表示不支持。
1表示能够缓存的都缓存,除非你指定SQL_NO_CACHE的除外。
2表示仅仅明确指定了SQL_CACHE的才会缓存。
开启SQL查询缓存
SELECT SQL_CACHE 字段名1,字段名2 FROM 表名 WHERE
SELECT SQL_NO_CACHE 字段名1,字段名2 FROM 表名 WHERE
前者是开启,后者是不开启查询缓存
不缓存的SQL语句特征
如果我们的SELECT语句里面包含有一些动态实时的函数,那么这个select语句将无法被查询缓存缓存起来。
now函数 表示现在的时间,是一个动态的值,查询缓存肯定无法使用,还有rand函数也是一样,是一个随机返回值,还有found_rows函数,返回的是行数,会变,还有很多同类的函数,查询缓存都是不生效的。
为什么缓存不了
除了前面说的SQL_NO_CACHE外,还有两个配置参数控制着查询缓存,一个是query_cache_limit和query_cache_size,前者控制当查询结果大于多少的时候将不会被缓存起来,而后者控制查询缓存最大的尺寸。
查询缓存什么时候失效
如果我们的相应结果有改变,那么查询缓存将失效,或者我们人为手动执行了下面这个SQL语句,那么所有的查询缓存将失效:
FLUSH QUERY CACHE
相应的视频请点击:MySQL性能提升方案之查询缓存介绍