欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用查询缓存

程序员文章站 2022-06-11 13:10:26
...

查询缓存的目的很简单,将 select 查询的结果缓存在内存中,以供下次直接获取。在默认情况下,MySQL 是没有开启查询缓存的,我们可以进行以下配置:

 

query_cache_size = 268435456

query_cache_type=1

query_cache_limit=1048576

 

这样一来,MySQL 将拥有 256 MB的内存空间来查询缓存结果、对于以 select 为主的查询应用,查询缓存理所当然地起到性能提升的作用,无论是 Innodb 还是 MyISAM,查询缓存都可以很好地工作,因为它在逻辑中位于比较高的层次。

 

--
-- 表的结构 `count_t`
--

CREATE TABLE `count_t` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `count` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

我们编写了一段 PHP 代码来比较查询缓存对 select 查询性能的影响,代码如下所示:

 

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "runoob";
 
// 创建链接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查链接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
} 

for($i = 1;$i <= 1000; $i++)
{
    $sql = "select * from count_t where id = ".$i;
    $result = $conn->query($sql);
}
$conn->close();

 

我们先关闭查询缓存,对它进行压力测试,结果如下所示:

 

使用查询缓存
            
    
    博客分类: 数据库  
 

然后我们打开查询缓存,再次进行同样的测试,结果如下所示:


使用查询缓存
            
    
    博客分类: 数据库  
 

可见,使用了查询缓存后,总时间减少了接近 16%。

 

但是,查询缓存有一个需要注意的问题,那就是缓存过期策略,MySQL 采用的机制是,当一个数据表有更新操作(比如 update 或者 insert )后,那么涉及这个表的所有查询缓存都会失效。

这样一来,对于 select 和 update 混合的应用来说,查询缓存反而可能会添乱,我们编写了以下这段 PHP 代码,将 update 和 select 交替执行,代码如下所示:

 

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "runoob";
 
// 创建链接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查链接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
} 

for($i = 1;$i <= 100; $i++)
{
    $sql = "UPDATE `count_t` SET `count`=`count`+1 where id = ".$i;
    $conn->query($sql);    
    $sql = "select * from count_t where id = ".$i;
    $conn->query($sql);
}
$conn->close();

 不使用查询缓存时,测试结果如下所示:


使用查询缓存
            
    
    博客分类: 数据库  
 开启查询缓存后,测试结果如下所示:

 
使用查询缓存
            
    
    博客分类: 数据库  
 

使用查询缓存后,花费了更多的时间。

  • 使用查询缓存
            
    
    博客分类: 数据库  
  • 大小: 7.7 KB
  • 使用查询缓存
            
    
    博客分类: 数据库  
  • 大小: 8.4 KB
  • 使用查询缓存
            
    
    博客分类: 数据库  
  • 大小: 8 KB
  • 使用查询缓存
            
    
    博客分类: 数据库  
  • 大小: 7.4 KB