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. Android ViewManager解读之requestLayout() 详解

    尊重原创: http://blog.csdn.net/sk719887916/article/details/48464035 上篇<Android View 中invalidate() 你所不 ...

  2. Ubuntu 14 安装Skype 4.3

    Ubuntu 14 安装Skype 4.3Step 1: 删除老版本sudo apt-get remove skype skype-bin:i386 skype:i386 sudo apt-get i ...

  3. Java-collections总结

    纸上得来终觉浅,绝知此事要躬行  --陆游    问渠那得清如许,为有源头活水来  --朱熹 类Collections是一个包装类.它包含有各种有关集合操作的静态多态方法.此类不能实例化,就像一个工具 ...

  4. Java集合之Stack

    Stack是栈,特性是先进后出(FILO,First In Last Out).Stack是继承于Vector(矢量队列),由于Vector是同数组实现的,Stack也是通过数组而非链表. Stack ...

  5. SQL 模糊查询(like)

    在进行数据库查询时,有完整查询和模糊查询之分. SQL模糊查询,使用like比较字,加上SQL里的通配符,请参考以下: 1.LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadde ...

  6. vs 2010调用matlab dll显示窗口核心代码

    matlab代码: figure('NumberTitle','off','menubar','none','toolbar','none','name','Topo Image'); x=0:pi/ ...

  7. html5中的全局属性

    在html5中,新增了一个"全局属性"的概念,所谓全局属性,是指可以对任何属性都使用的属性.下面列出常用的全局属性. 1.contentEditable属性,是微软开发的,该属性主 ...

  8. 前端技术之_CSS详解第三天

    前端技术之_CSS详解第三天 二.权重问题深入 2.1 同一个标签,携带了多个类名,有冲突: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...

  9. IOS Dev 需要常看的网站<转>

    英文系列 网站 http://Raywenderlich.com 这个不多说了吧,iOS界的百科全书.iOS By tutorial系列书从iOS7到8全买的正版别说499刀了,999刀也入手. ob ...

  10. Mysql精华版(命令大全)

    数据库的操作 a) 创建数据库:create database 库名[库选项]; b) 查看数据库:show databases;  show create database 库名; c) 删除数据库 ...