MySQL学习笔记(九)

本文详细介绍了MySQL查询缓存的工作原理、配置选项及其维护方法。MySQL查询缓存能显著提高查询效率,尤其适用于大量静态数据的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  第十章 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           查询缓存中的块的总数目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值