`
王之子
  • 浏览: 104988 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用查询缓存

阅读更多

查询缓存的目的很简单,将 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
分享到:
评论

相关推荐

    Hibernate一级缓存、二级缓存以及查询缓存实例

    Hibernate一级缓存、二级缓存以及查询缓存实例

    PHP查询缓存.doc

    PHP查询缓存

    spring AOP实现查询缓存

    本代码通过使用spring aop+ehcache的技术,实现了方法级别的查询缓存,主要原理是 方法的完整路径+方法参数值,作为key,放入cache中,下次访问时先判断cache中是否有该key.

    mysql查询缓存

    MySQL的查询缓存并非缓存执行计划,而是查询及其结果集,这就意味着只有相同的查询操作才能命中缓存,因此MySQL的查询缓存命中率很低,另一方面,对于大结果集的查询,其查询结果可以从cache中直接读取,有效的提升...

    7:Hibernate查询缓存及实现.PPT

    7:Hibernate查询缓存Query Cache及实现

    hibernate一级缓存、二级缓存和查询缓存

    NULL 博文链接:https://cdxs2.iteye.com/blog/1936594

    基于SpringBoot框架搭建的物联网数据采集系统服务器端(源码)

    * 当查询单个Gateway、Sensor、SensorClassify时使用查询缓存,从数据库查询过的数据会存入缓存,提高查询效率 * 传感器提交Data数据时使用添加缓存,不直接操作数据库,而是将Data添加到Redis中形成缓存队列,...

    论文研究-自适应的数据库查询缓存.pdf

    而查询缓存是语义缓存的一种,在 SQL解析与查询执行之间,通过研究查询缓存的自主管理来提高数据库的查询性能。首先介绍了数据库常用的语义缓存与自主计算,然后对查询缓存进行了形式化定义,并提出了自适应的查询...

    容器缓存查看利器hcache的使用

    查询缓存使用命令hcache,已经是二进制的了,上传可以使用

    hibernate查询缓存1

    hibernate查询缓存1

    构建高性能Web站点_PDF_45.5M

    11.5 使用查询缓存 11.6 临时表 11.7 线程池 11.8 反范式化设计 11.9 放弃关系型数据库 第12章 Web负载均衡 12.1 一些思考 12.2 HTTP重定向 12.3 DNS负载均衡 12.4 反向代理负载均衡 12.5 IP负载均衡 ...

    构建高性能Web站点(PDF)

    11.5 使用查询缓存 11.6 临时表 11.7 线程池 11.8 反范式化设计 11.9 放弃关系型数据库 第12章 Web负载均衡 12.1 一些思考 12.2 HTTP重定向 12.3 DNS负载均衡 12.4 反向代理负载均衡 12.5 IP负载均衡 ...

    构建高性能Web站点(PDF)-第2部分

    11.5 使用查询缓存 11.6 临时表 11.7 线程池 11.8 反范式化设计 11.9 放弃关系型数据库 第12章 Web负载均衡 12.1 一些思考 12.2 HTTP重定向 12.3 DNS负载均衡 12.4 反向代理负载均衡 12.5 IP负载均衡 ...

    清空mysql 查询缓存的可行方法

    您可能感兴趣的文章:MySQL优化之缓存优化mysql的查询缓存说明使用Memcache缓存mysql数据库操作的原理和缓存过程浅析浅析MySQL内存的使用说明(全局缓存+线程缓存)MySQL高速缓存启动方法及参数详解(query_cache_...

    mysql 设置查询缓存

    在使用中,查询缓存会存储一个 SELECT 查询的文本与被传送到客户端的相应结果。 如果之后接收到一个同样的查询,服务器将从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。 注意:查询缓存绝不返回过期...

    mysql缓存查询和设置

    mysql缓存查询和设置global_query_cache_size

    Spring 整合 Hibernate 时启用二级缓存实例详解

    Spring 整合 Hibernate 时启用二级缓存实例详解 写在前面:  1. 本例使用 Hibernate3 + Spring3;  2. 本例的查询使用了 ...-- 配置使用查询缓存 --&gt; &lt;prop key=hibernate.cache.use_query_cache&gt;true &lt;!-

    缓存问题解决方案&批量查询优化1

    1、缓存问题解决方案 1、缓存空数据 2、BloomFilter(布隆过滤器):在缓存之前再加一道屏障,里面存储目前redis数据库中存在的所有 1、互斥锁 2

Global site tag (gtag.js) - Google Analytics