您的位置:首页 > 产品设计 > UI/UE

mysql 查询缓存 query_cache_type

2013-11-15 11:17 357 查看
sql_cache意思是说,将查询结果放入查询缓存中。

sql_no_cache意思是查询的时候不缓存查询结果。

sql_buffer_result意思是说,在查询语句中,将查询结果缓存到临时表中。

这三者正好配套使用。sql_buffer_result将尽快释放表锁,这样其他sql就能够尽快执行。

使用 FLUSH QUERY CACHE 命令,你可以整理查询缓存,以更好的利用它的内存。这个命令不会从缓存中移除任何查询。FLUSH TABLES 会转储清除查询缓存。

RESET QUERY CACHE 使命从查询缓存中移除所有的查询结果。

--------------------------------------------------

那么mysql到底是怎么决定到底要不要把查询结果放到查询缓存中呢?

是根据query_cache_type这个变量来决定的。

这个变量有三个取值:0,1,2,分别代表了off、on、demand。

mysql默认为开启 on

意思是说,如果是0,那么query cache 是关闭的。

如果是1,那么查询总是先到查询缓存中查找,即使使用了sql_no_cache仍然查询缓存,因为sql_no_cache只是不缓存查询结果,而不是不使用查询结果。

select count(*) from innodb;

1 row in set (1.91 sec)

select sql_no_cache count(*) from innodb;

1 row in set (0.25 sec)

如果是2,DEMAND。

在my.ini中增加一行

query_cache_type=2

重启mysql服务

select count(*) from innodb;

1 row in set (1.56 sec)

select count(*) from innodb;

1 row in set (0.28 sec)

没有使用sql_cache,好像仍然使用了查询缓存

select sql_cache count(*) from innodb;

1 row in set (0.28 sec)

使用sql_cache查询时间也一样,因为sql_cache只是将查询结果放入缓存,没有使用sql_cache查询也会先到查询缓存中查找数据

结论:只要query_cache_type没有关闭,sql查询总是会使用查询缓存,如果缓存没有命中则开始查询的执行计划到表中查询数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: