Mysql 查询缓存总结

MySQL查询缓存解释

    缓存完整的SELECT查询结果,也就是查询缓存。保存查询返回的完整结果。当查询命中该缓存,mysql会立刻返回结果,跳过了解析、优化和执行阶段,

    查询缓存系统会跟踪查询中涉及的每个表,如果这些表发生变化,那么和这个表相关的所有数据都将失效

命中条件

    Mysql判断缓存命中的方法很简单:缓存存放在一个引用表中,通过一个哈希值引用,这个哈希值包括如下因素,即查询本身、当前要查询的数据库、客户端协议的版本等一些都有可能影响返回结果信息。

    当判断查询缓存是否命中时,Mysql不会解析、正规化或者参数化的查询语句,而是直接使用Sql语句和客户端发送过来的其他原始信息(Sql)。任何字符上的不同,例如注释,任何的不同都会导致缓存不命中,所以在编写Sql语句的时候,需要特别注意这一点,通常使用统一的编码规则是一个好的习惯,在这里这个好习惯可能让你的系统运行的更快

    当查询语句有一些不确定的数据时,则不会被缓存,例如白喊函数NOW()或者CURRENTDATE()的查询不会被缓存

    如果查询语句中包含任何不确定的函数,那么在查询缓存中是不可能找到缓存结果的,即使之前刚刚执行这样的查询

导致没有命中条件

    1、缓存碎片

    2、内存不足

    3、数据修改

特别注意

    Mysql的查询缓存在很多时候可以提升查询性能,在使用的时候,有一些问题需要特别注意。首先,打开查询缓存对 读,写 操作都会带来额外的消耗:

      1、读查询在开始之前必须先检查是否命中缓存

      2、如果这个读查询可以被缓存,那么当完成执行后,Mysql若发现查询缓存中没有这个查询,会将其结果存入查询缓存,这会带来额外的系统开销

      3、这对写操作也会影响,因为当向某个表写入数据的时候,Mysql必须将对应表的所有缓存都设置失效。

      4、对于存储引擎InnoDB用户来说,事务的一些特性会限制查询缓存的作用。当一个语句在事务中修改某个表,Mysql会将这个表对应的查询缓存都设置失效。在事务提交前该表的查询都无法被缓存,只能在事务提交后才能被缓存。因此长时间运行的事务,会大大降低查询缓存的命中率

      5、inner JOIN 和 其他连接 查询 如果其中一个表数据发生变化 则直接导致 缓存失效

缓存配置参数

  query_cache_type: 是否打开缓存

  可选项

    1) OFF: 关闭

    2) ON: 总是打开

    3) DEMAND: 只有明确写了SQL_CACHE的查询才会吸入缓存

  如果不想所有查询都进入查询缓存,但是又希望某些查询走查询缓存,那么可以将 query_cache_type 设置成  DEMAND ,然后在希望缓存的查询上加上SQL_CACHE。这虽然需要在查询中加入额外的语法,但是可以让你非常自由的控制那些查询需要被缓存。相反如果不希望缓存 加上SQL_NO_CACHE

      

Mysql 查询缓存总结的更多相关文章

  1. MySQL查询缓存

    MySQL查询缓存 用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析.优化和执行等阶段. 如何检查缓存? MySQL保存结果于缓存中: 把SELECT语句本身做h ...

  2. mysql查询缓存参数

    由人说mysql查询缓存是鸡肋,也许吧,但还是要看场景: 查询缓存: 开启查询缓存:/etc/my.cnfquery_cache_type=1 重启

  3. 启用MySQL查询缓存

    启用MySQL查询缓存能够极大地减低数据库server的CPU使用率,实际使用情况是:开启前CPU使用率120%左右,开启后降到了10%. 查看查询缓存情况: mysql> show varia ...

  4. mysql查询缓存打开、设置、参数查询、性能变量意思

    http://blog.sina.com.cn/s/blog_75ad10100101by7j.html http://www.cnblogs.com/zemliu/archive/2013/08/0 ...

  5. mysql 查询缓存配置和查看

    Mysql 查询缓存 查询缓存的作用就是当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提高了性能,节省时间. 1.配置查询缓存 修改配置文 ...

  6. Mysql查询缓存碎片、缓存命中率及Nagios监控

    Mysql 的优化方案,在互联网上可以查找到非常多资料,今天对Mysql缓存碎片和命中率作了详细了解,个人作了简单整理. 一.Mysql查询缓存碎片和缓存命中率. mysql> SHOW STA ...

  7. RDS for MySQL查询缓存 (Query Cache) 的设置和使用

    https://help.aliyun.com/knowledge_detail/41717.html?spm=5176.7841698.2.11.aCvOXJ RDS for MySQL查询缓存 ( ...

  8. Mysql查询缓存研究

    转载声明:本文为DBA+社群原创文章,转载必须连同本订阅号二维码全文转载,并注明作者名字及来源:DBA+社群(dbaplus). http://mp.weixin.qq.com/s?__biz=MzI ...

  9. 【转】MySQL查询缓存详解

    [转]MySQL查询缓存详解 转自:https://www.cnblogs.com/Alight/p/3981999.html 相关文章:http://www.zsythink.net/archive ...

随机推荐

  1. EventBus的其他常用函数

    上一篇EventBus最简易使用方式介绍了EventBus最简易的使用方式,摆脱了叽里呱啦+图片的长篇大论.目的是为了让刚开始接触的人们不晕头转向.那么这篇..我也要开始图片+叽里呱啦了. 转载请注明 ...

  2. 《java入门第一季》之面向对象面试题(fianl关键字)

    /* 面试题:final修饰局部变量的问题 基本类型:基本类型的值不能发生改变. 引用类型:引用类型的(地址值)(不能发生改变),但是,该对象的堆内存的值是可以改变的. */ class Studen ...

  3. DBUtils架构分析

    首先,我们看看DBUtils的组织架构图 一点一点来看,AbstructQueryRunner封装了PreparStatement的产生与装填,同时还包括了对数据库资源的关闭等操作.它有两个子类,Qu ...

  4. 【Qt编程】Qt学习之窗口间的相互切换

    在用Qt设计GUI时,经常要设计两个窗口之间的相互切换,即可以从一个窗口跳转到另一个窗口,然后又从另一个窗口跳转回原窗口.下面我们来介绍具体的实现方法: 工程建立及功能描述: 首先,我们建立Qt  G ...

  5. 【翻译】Sencha Touch 2入门:创建一个实用的天气应用程序之三

    原文:Getting Started with Sencha Touch 2: Build a Weather Utility App (Part 3) 作者:Lee BoonstraLee is a ...

  6. Socket层实现系列 — bind()的实现(一)

    bind()函数的使用方法很简单,但是它是怎么实现的呢? 笔者从应用层出发,沿着网络协议栈,分析了bind()的系统调用.Socket层实现,以及它的TCP层实现. 本文主要内容:bind()的系统调 ...

  7. 微信android混淆打包减少安装包大小

    首先,感谢微信android团队的分享 微信中的资源混淆工具主要为了混淆资源ID长度(例如将res/drawable/welcome.png混淆为r/s/a.png),同时利用7z深度压缩,大大减少了 ...

  8. wince6.0 编译报错:"error C2220: warning treated as error - no 'object' file generated"的解决办法

    内容提要:wince6.0编译报错:"error C2220: warning treated as error - no 'object' file generated" 原因是 ...

  9. OpenShift实战(七):OpenShift定制镜像S2I

    1.基础镜像制作 由于公司的程序是Java开发,上线发布使用的是maven,如果使用openshift自带的S2I,每次都会全量拉取代码(代码比较多,每次全量拉太慢),然后每次打包都会再一次下载mav ...

  10. spring的优缺点

    它是一个开源的项目,而且目前非常活跃:它基于IoC(Inversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫 你必须在每一层 中必须使用Spring,因为它 ...