`
王之子
  • 浏览: 109434 次
  • 性别: 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查询缓存1

    3. 在查询语句中使用`setCacheable(true)`来指定该查询应使用查询缓存。 需要注意的是,查询缓存并不适用于所有情况。对于经常变化的数据或者实时性要求高的场景,使用查询缓存可能导致数据不一致。此外,合理的...

    Hibernate查询缓存及实现.PPT

    例如,如果在没有启用查询缓存时,使用`load()`方法获取的单个持久化对象会被缓存,但若想缓存`findAll()`, `list()`, `Iterator()`, `createQuery()`, `createCriteria()`等方法获取的结果集,必须设置`hibernate....

    MySQL 执行过程与查询缓存1

    **查询缓存**虽然在新版本中已不再使用,但在早期版本中,它可以提高查询速度,但需注意的是,任何对查询中涉及的表的修改都会使相关缓存失效,因此命中率不高。**分析器**用于解析SQL语句,检查语法和语义,确保...

    day37 07-Hibernate二级缓存:查询缓存

    然而,使用查询缓存需要注意几个关键点: - **更新一致性**:由于二级缓存可能包含旧数据,所以在进行增删改操作后,需要确保清理相关查询的缓存条目,以保持数据的一致性。 - **缓存策略**:Hibernate提供了不同的...

    Hibernate二级缓存

    总结来说,Hibernate的二级缓存和查询缓存是提升性能的重要手段,但正确配置和使用它们至关重要,以免带来不必要的性能损失。通过合理的缓存策略和配置,可以有效地减少数据库交互,提升应用的响应速度。

    MYSQL查询缓存性能问题分析与优化案例(绝对精华)[参照].pdf

    对于考虑使用或正在使用查询缓存的用户来说,有几个关键点需要注意: 1. **测试验证**:务必对你的特定工作负载进行测试,验证查询缓存是否真的能带来性能提升。不同的应用和工作负载可能对查询缓存有不同的响应。 ...

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

    本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始。一级缓存是Hibernate默认提供的缓存,它是每个Session级别的,也被称为...

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

    **hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...

    Mysql 缓存

    MySQL数据库系统在处理查询时,为了提高性能,使用了多种缓存机制,其中最常见的是查询缓存(Query Cache)。本文将深入探讨MySQL的查询缓存功能,以及如何通过全局变量`global_query_cache_size`来调整其大小。 ...

    hibernate二级缓存使用范例

    不过,需要注意的是,查询缓存依赖于二级缓存,因此必须先启用二级缓存才能使用查询缓存。 在配置二级缓存时,我们需要在Hibernate的配置文件中声明缓存提供者,并在实体类的映射文件中启用二级缓存。例如,对于...

    hibernate 缓存策略

    然而,由于可能存在并发更新问题,使用查询缓存需谨慎,尤其在高并发场景下。查询缓存的工作流程包括: 1. 执行查询并获取结果。 2. 将查询语句和结果哈希值存入缓存。 3. 当同一查询再次执行时,首先检查缓存,若...

    Hibernate_二级缓存 实验心得,手册

    - **查询缓存使用**:对于复杂查询或经常变动的数据,建议不使用查询缓存,以减少不必要的缓存维护成本。 #### 六、总结 通过本次实验,不仅深入了解了Hibernate二级缓存的基本概念和工作原理,还掌握了如何通过...

    PHP查询缓存.doc

    【PHP查询缓存】是指在PHP应用程序中,为了提高数据库查询效率和减轻数据库负载,将SQL查询的结果存储起来,下次相同查询时直接读取缓存数据,而不是重新执行查询。这种方式特别适用于那些频繁且静态的数据,可以...

    计算机缓存漫谈

    在数据库操作中使用查询缓存,避免重复计算;或者在算法设计中采用动态规划,利用已计算结果的缓存来加速求解过程。 此外,工具在优化缓存使用方面也起着重要作用。例如,性能分析工具(如Intel VTune、Chrome ...

    面试题 数据库缓存篇.pdf

    关于查询缓存的配置,MySQL中可以通过query_cache_type参数来设置查询缓存的使用方式,其有三个值:0表示不使用查询缓存,1表示始终使用查询缓存,而2则表示按需使用查询缓存。query_cache_size参数用于指定为查询...

    hibernate对二级缓存的理解

    但这并不意味着所有查询都适合使用查询缓存,因为它要求查询条件完全一致,否则可能会得到过时的数据。 总的来说,合理利用Hibernate的二级缓存可以极大地提升系统性能,但同时也需要注意缓存管理和一致性问题,...

    Hibernate二级缓存技术

    - `usage`:缓存使用模式,例如`read-only`表示只读模式。 **4. 查询缓存** 如果需要使用查询缓存,还需要在查询或`Criteria`时设置`setCacheable(true)`: ```java Session session = sessionFactory....

    hibernate开启二级缓存和查询缓存

    Hibernate 是一个流行的对象关系...通过以上内容,我们可以了解到 Hibernate 的二级缓存和查询缓存机制,以及如何在实际应用中配置和使用它们。合理利用这些缓存技术,能有效提升应用程序的性能,减轻数据库的压力。

    hibernate查询缓存详细分析

    关闭二级缓存意味着对象不会被缓存,但查询缓存依然可以使用,只是缓存的对象将无法获取。 七、注意事项与最佳实践 1. 谨慎使用查询缓存,因为它依赖于数据的稳定性。如果数据经常变化,使用查询缓存可能会导致返回...

Global site tag (gtag.js) - Google Analytics