MySQL优化方向之查询缓存的介绍,提升我们的数据库性能

MySQL的查询缓存是我们优化MySQL数据库的一个方向,我们有必要介绍一下,看看MySQL的查询缓存是什么?它是怎么工作的?什么时候不会走查询缓存?以及为什么查询缓存不生效等等问题。

查询缓存是什么

将某个select语句和相应的查询结果缓存起来,如果以后有相同的select语句的话,就直接从查询缓存中读取结果,不需要再执行表查询。

这里指的是同一个select语句。

仅仅对select语句有效。

因为不需要执行表查询,所以更快。

它不会返回过时的数据,如果数据有改变,整个查询缓存将被冲刷。

仅仅适用于以读为主的应用,频繁写应用不适合。


检查MySQL数据库是否支持查询缓存

在命令行登录MySQL服务器之后,执行SHOW VARIABLES LIKE 'have_query_cache'语句就能够看到你的MySQL服务器是否开启了查询缓存,参考下图,如果为yes表示支持查询缓存,否则表示不支持查询缓存,该值有0,1,2三种。

MySQL优化方向之查询缓存的介绍,提升我们的数据库性能

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性能提升方案之查询缓存介绍

相关推荐