初学MySQL之查询缓存

来源:互联网 发布:儿童软件大全 编辑:程序博客网 时间:2024/05/17 22:44

MySQL服务器端,针对SELECT操作做了查询结果的缓存,缓存查询的文本以及发送的结果。对于一个不经常更新并且需要频繁SELECT的表而言,这样的特性非常有用,比如一些相对稳定的web动态页面。

需要注意以下几点:

1.查询缓存不返回旧的数据。当表更改后,查询缓存值的相关条目被清空。

2. 如果有许多mysqld服务器更新相同的MyISAM(默认存储引擎)表,在这种情况下查询缓存不起作用

3.查询缓存的SQL语句区分大小写

4.当一个表被更改后(如updatedeleteinsert等操作),该表所有的缓存都被清空

另外对部分select操作,并不做缓存处理,如下:

1.引用自定义函数(UDFs)

2.引用自定义变量。

3.引用mysql系统数据库中的表。

4.下面方式中的任何一种:

SELECT ...IN SHARE MODE

           SELECT ...FOR UPDATE

           SELECT ...INTO OUTFILE ...

           SELECT ...INTO DUMPFILE ...

           SELECT * FROM ...WHERE autoincrement_col IS NULL

 

 

查询缓存可以通过选项SELECT SQL_CACHE。。。。或SELECT  SQL_NO_CACHE。。。。来显式指定。

 

通过have_query_cache服务器系统变量指示查询缓存是否可用:

 

mysql> SHOW VARIABLES LIKE 'have_query_cache';

 

此外还有个全局变量query_cache_size来指定高速缓存的大小,可以通过设置该变量来进行配置。

mysql> SET GLOBAL query_cache_size =  ??;

注意,由于系统需要分配40KB大小的内存来分配数据结构,因此最好指定query_cache_size的值大于40KB

但这里对query_cache_size值的设置将影响所有的用户,对于单个客户端,可通过设置会话的方式来对查询缓存进行控制:

mysql> SET SESSION query_cache_type = OFF;

要控制可以被缓存的具体查询结果的最大值,应设置query_cache_limit变量。 默认值是1MB

////////////////////////

看起来,查询缓存似乎放在共享存储区域,拥有权限的用户都可以进行读取。。。。(有待证实!!)