第十章 MySQL查询缓存
课程目录
MySQL查询缓存如何工作
MySQL查询缓存选项
MySQL查询缓存设置
MySQL查询缓存状态维护
1、MySQL查询缓存如何工作
MySQL 4.0.1开始,MySQL 服务器有一个重要特征:Query Cache。当在使用中,
查询缓存会存储一个SELECT查询的文本域被传递送到客户端的相应结果。如果之后
接到一个同样的查询,服务器将从查询缓存中检索结果,而不是再次分析和执行
这个同样的查询。
注意:查询缓存绝不返回过期数据。当数据被修改后,在查询缓存中的任何相关词条均被存储清楚。
在某些表并不经常更改,而你又对它执行大量的相同查询时,查询缓存将是非常有用的。
对许多WEB服务器使用大量的动态信息,这是一个很典型的情况。
比较:
查询在分析之前先被比较,因而
select * from table-name和
Select * from table-name
对于查询缓存被当做是不同的查询,因而查询需要严格的一致(字节对字节的),才会被认为是同样的。
缓存失效:
如果一个表发生的改变(insert、update、delete、truncate、alter或drop table/database),
那么所有这张表使用的缓存的查询将失效,并从缓存中移除。
如果一个查询包括下面的函数,它将不能被缓存:
函数
用户自定义函数 connection_id found_rows
get_lock release_lock load_file
master_pos_wait now sysdate
current_timestamp curdate current_date
curtime current_time database
encrypt last_insert_id rand
unix_timestamp user benchmark
2、查询缓存选项
有两个可能的查询缓存相关的参数可以在一个select查询宏被指定
选项 含义
sql_cache 如果query_cache_type为demand/on,允许该查询被缓存
query_cache_type为on,这是缺省的。
如果query_cache_type为off,它不缓存任何查询。
sql_no_cache 使这个查询不被缓存,不允许这个查询被存储到高速缓存中
select @@query_cache_type; 查询缓存状态
系统变量have_query_cache表示查询缓存是否可用
mysql->show variables like 'have_query_cache';
系统变量query_cache_size表示查询缓存的大小。如果设置它为0,查询缓存将被禁止(缺省为0)
mysql->select @@global.query_cache_size;
mysql->set @@global.query_cache_size=1000;
若启用查询缓存,则系统变量query_cache_type表示查询缓存工作方式,他可以设置成如下值:
0(off,不缓存结果)
1(on,缓存所有结果,除了select sql_no_cache... 查询)
2(demand,仅缓存select sql_cache ... 查询)
用户可以禁用查询缓存:
mysql->set session query_cache_type=off;
3、缓存维护
碎片整理
使用flush query cache命令,可以整理查询缓存,以更好的利用它的内存。这个命令不会
从缓存中移除任何查询。
清空缓存
reset query cache 命令从查询缓存中移除所有的查询结果
flush tables也会清楚查询缓存。
使用show status来监视查询缓存性能。
mysql->show status like 'qcache%';
变量 含义
qcache_queries_in_cache 搜索缓存结果集的查询数目
qcache_inserts 被加入到缓存中的查询数目
qcache_hits 缓存命中数目
qcache_lowmem_prunes 因为缺少内存而被从缓存中删除的查询数目
qcache_not_cached 没有被缓存的查询数目
qcache_free_memory 查询缓存中的空闲内存总数
qcache_free_blocks 查询缓存中的空闲内存块的数目
qcache_total_blocks 查询缓存中的块的总数目
MySQL学习笔记(九)
最新推荐文章于 2025-08-08 14:10:14 发布