Mysql 查询缓存总结
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 查询缓存总结的更多相关文章
- MySQL查询缓存
MySQL查询缓存 用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析.优化和执行等阶段. 如何检查缓存? MySQL保存结果于缓存中: 把SELECT语句本身做h ...
- mysql查询缓存参数
由人说mysql查询缓存是鸡肋,也许吧,但还是要看场景: 查询缓存: 开启查询缓存:/etc/my.cnfquery_cache_type=1 重启
- 启用MySQL查询缓存
启用MySQL查询缓存能够极大地减低数据库server的CPU使用率,实际使用情况是:开启前CPU使用率120%左右,开启后降到了10%. 查看查询缓存情况: mysql> show varia ...
- mysql查询缓存打开、设置、参数查询、性能变量意思
http://blog.sina.com.cn/s/blog_75ad10100101by7j.html http://www.cnblogs.com/zemliu/archive/2013/08/0 ...
- mysql 查询缓存配置和查看
Mysql 查询缓存 查询缓存的作用就是当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提高了性能,节省时间. 1.配置查询缓存 修改配置文 ...
- Mysql查询缓存碎片、缓存命中率及Nagios监控
Mysql 的优化方案,在互联网上可以查找到非常多资料,今天对Mysql缓存碎片和命中率作了详细了解,个人作了简单整理. 一.Mysql查询缓存碎片和缓存命中率. mysql> SHOW STA ...
- RDS for MySQL查询缓存 (Query Cache) 的设置和使用
https://help.aliyun.com/knowledge_detail/41717.html?spm=5176.7841698.2.11.aCvOXJ RDS for MySQL查询缓存 ( ...
- Mysql查询缓存研究
转载声明:本文为DBA+社群原创文章,转载必须连同本订阅号二维码全文转载,并注明作者名字及来源:DBA+社群(dbaplus). http://mp.weixin.qq.com/s?__biz=MzI ...
- 【转】MySQL查询缓存详解
[转]MySQL查询缓存详解 转自:https://www.cnblogs.com/Alight/p/3981999.html 相关文章:http://www.zsythink.net/archive ...
随机推荐
- Java 类加载机制 ClassLoder
纸上得来终觉浅,绝知此事要躬行 --陆游 问渠那得清如许,为有源头活水来 --朱熹 一个类从被加载到内存中开始到卸载出内存为止,它的整个生命周期包括了:加载(loading).验证(V ...
- 【Qt编程】基于Qt的词典开发系列--后序
从去年八月份到现在,总算完成了词典的编写以及相关技术文档的编辑工作.从整个过程来说,文档的编写比程序的实现耗费的时间更多.基于Qt的词典开发系列文章,大致包含了在编写词典软件过程中遇到的技术重点与难点 ...
- Leetcode_49_Anagrams
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42744709 Given an array of stri ...
- sharedpreferences如何保存对象
昨天做了一个搜索历史的功能,然后根据搜索的历史可以调回到上一个页面,这里涉及到一个用sharedpreferences保存对象的问题,sharedpreferences是不能够直接保存对象的,我们需要 ...
- OpenCV 实现哈哈镜效果
代码,有参考别人的代码 // haha_mirror.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostrea ...
- Unix - 文件中构成一个空洞的分析
lseek函数显示地为一个打开文件设置偏移量,文件偏移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞,这一点是允许的.位于文件中但没有写过的字节都被读为 ...
- ANDROID框架结构和介绍
下图是ANDROID4.4 版本包含的所有系统服务.本地服务和应用的框架图,组织为三层:应用层.系统服务层.本地进程和服务层.应用层通常通过服务提供的对外API接口(一个服务管理对象)与服务交互,系统 ...
- 任务管理器中的PID找不到
PID是Process ID的简称,这对WINDOWS开发人员来说是非常有用的信息,但对于普通用户来说则根本不必去理会. 举个例子来说: 在网站发布的时候,需要安装IIS,那么iis的tcp的80 ...
- C++中重载、覆盖与隐藏的区别(转)
本文摘自林锐博士的<高质量C++/C编程指南>. 成员函数的重载.覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防. 1.重载与覆盖 成员函数被重 ...
- Java学习网站大全
Java学习网站 http://www-900.ibm.com/developerWorks/cn/java/index.shtml IBM的JAVA专题--永远的蓝色巨人 http://www.hu ...