查询缓存是指存储使用SELECT语法查询到的返回到客户端的文本。当相同的请求再次发生时,会从查询缓存中获取数据,而非再执行一遍查询。查询缓存是共享Session会话的,所以一个客户端的请求可能与另一个客户端的请求得到相同的结果。

  当服务器频繁收到相同的请求而数据库中的表数据变化频率又不高,查询缓存是非常有用的,它可以大大提高应用程序的访问效率。很多Web服务器利用这一原理基于数据库的内容动态生成页面。

  查询缓存并不会返回过期的数据,当数据库中的表数据发生变化时,相关的查询缓存会自动清除。但是查询缓存并不会在多个mysqld服务器实例中更新同一个表的数据时有效。

  查询缓存对于存储在多个数据库分区表中的数据是无效的。如果查询涉及多个数据库分区表,查询缓存会自动失效。

  如果要禁用查询缓存的话,只需在启动时将query_cache_size的大小设置为0即可。

  查询缓存在一定情况下会提升系统的性能,但并不代表在任何情况下都会提升系统的性能,某些情况下,甚至可能会降低系统的性能。如

  1)人们对于分级设置查询缓存的分歧很大,有些人认为可能超出了启用它的好处。查询缓存的大小设置为几十兆的时候通常是有效的,但是设置成几百兆的时候就不一定了。

  2)在服务器超负荷时使用查询缓存是非常有效的。一个由多个SELECT组合成的复杂查询使用查询缓存的效率肯定是非常高效的,但如果有频繁插入数据的话,不使用缓存的话比起使用查询缓存效率要高的多。

  查询缓存的执行原理


  对于下面这两种查询,查询缓存会当作两种不同形式的查询,因为查询缓存会严格比较两次查询的字节是否完全相同。对于不同的字符串,不同的数据表,不同的协议版本,不同的字符集都会当作不同的查询。

SELECT * FROM tbl_name
Select * from tbl_name

  在以下情况下并不适合使用查询缓存

  1)查询是外部查询的一个子查询

  2)在存储过程,触发器或函数中执行的查询

  如果数据表发生变化,如增加/修改/删除表结构或表数据,都会导致查询缓存失效,缓存的数据会自动从缓存中清除。

  当查询缓存包含了以下函数时,查询缓存并不会有效。

  查询缓存不适用的情况

  1)查询使用用户自定义的函数或存储过程。

  2)查询包含了用户变量或本地存储的程序变量。

  3)涉及到数据库中的mysql,INFORMATION_SCHEMA和performance——schema表。

  4)查询涉及到数据库分区表。

  5)查询是如下的类型:

SELECT ... LOCK IN SHARE MODE
SELECT ... FOR UPDATE
SELECT ... INTO OUTFILE ...
SELECT ... INTO DUMPFILE ...
SELECT * FROM ... WHERE autoincrement_col IS NULL

  6)查询用到了临时表。

  7)查询没有用到数据表。

  8)查询包含了警告。

  9)用户查询的表中拥有特定的权限。

  使用查询缓存和不使用查询缓存的两种方式

SELECT SQL_CACHE id, name FROM customer;
SELECT SQL_NO_CACHE id, name FROM customer;

  配置查询缓存


  当查询缓存query_cache_size设置为一个非0的数值时,最小的容量是40KB,这是由它的系统结构所决定的。在应用时设置为多大合适,还是要根据实际情况而定。

详解MySQL查询缓存相关推荐

  1. linux mysql 查看缓存_详解MySQL查询缓存

    查询缓存是指存储使用SELECT语法查询到的返回到客户端的文本.当相同的请求再次发生时,会从查询缓存中获取数据,而非再执行一遍查询.查询缓存是共享Session会话的,所以一个客户端的请求可能与另一个 ...

  2. mysql大小写区分_详解MySQL查询时区分字符串中字母大小写的方法

    如果你在mysql有唯一约束的列上插入两行值'A'和'a',Mysql会认为它是相同的,而在oracle中就不会.就是mysql默认的字段值不区分大小写?这点是比较令人头痛的事.直接使用客户端用sql ...

  3. 详解Mysql查询今日、昨天、本月、上个月、去年今天、最近几天的数据

    数据库 log_web 表信息如下: id ip time 1 0:0:0:0:0:0:0:1 2017-08-31 15:51:57 2 0:0:0:0:0:0:0:1 2017-08-31 15: ...

  4. mysql sql组合_详解mysql 组合查询

    使用UNION 多数SQL查询都只包含一个或多个表中返回数据的单条SELECT语句.MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回.这些组合查询通常称为并(uni ...

  5. 详解mysql子查询

    本文详解mysql中的子查询: 子查询分为where子查询和from子查询. where子查询包括标量子查询.列子查询.行子查询.exists子查询 from子查询包括表子查询 1.标量子查询 概念: ...

  6. mysql通配符escape使用_详解MySQL like如何查询包含'%'的字段(ESCAPE用法)

    在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...

  7. mysql通配符escape使用_详解MySQL like如何查询包含#39;%#39;的字段(ESCAPE用法)-MySQL教程-Web开发者网...

    在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...

  8. mysql like escape_详解MySQL like如何查询包含#39;%#39;的字段(ESCAPE用法)

    在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...

  9. SQL全方位攻略:5. SQL “方言”大比拼:Oracle、MySQL、PostgreSQL限制检索行数语法详解(分页查询)

    系列文章目录 SQL全方位攻略:1.数据库介绍 SQL全方位攻略:2.SQL介绍 SQL全方位攻略:3.SQL标准 SQL全方位攻略:4. 标准SQL和SQL"方言" 文章目录 系 ...

最新文章

  1. JAVA操作properties文件
  2. AD,proteus操作
  3. Linux 中挖矿病毒处理过程
  4. UVa 10603 Fill (BFS+优先队列)
  5. vue 获取当前元素的父元素_react获取触发元素的属性 e.target.dataset
  6. 《Adobe Flash Professional CC经典教程》——1.15 复习
  7. 三、解线性方程组的迭代法
  8. springboot底层原理简述
  9. 后端开发技术栈(含视频、书籍推荐)
  10. 学习Globle和window对象学习心得+jquery中的$(#id)与document.getElementById(id)的区别+成功激活win10的方法
  11. JDK环境变量的两种配置方法——以JDK8和JDK10为例
  12. hbase数据库scan操作_HBase Scan 使用
  13. 二十一世纪大学英语读写基础教程学习笔记(原文)——4 - The Happiest Man in the World(世界上最幸福的人)
  14. 淘宝大数据量产品技术架构
  15. 2022年C等级考试九月二级真题E:反反复复
  16. 判赔20万!星愿浏览器因拦截广告被优酷起诉;苹果调查iPhone 14 Pro传输数据后卡死问题|极客头条
  17. 基于android开发共享停车位的设计与实现(含源码及毕业设计)
  18. 手机qq表白代码大全可复制_网页内文字无法复制怎么办?一分钟看懂这些方法,让你随意复制...
  19. 3d轮播图(另一种方式,可以实现的功能更为强大也更为灵活,简单一句话,比酷狗优酷的炫)...
  20. 取消单个或多个Notes邮箱和iNotes的关联

热门文章

  1. oracle测试表什么名字,Oracle_PLSQL测试题与答案(绝对经典)
  2. 微信防撤回python代码_Python实现微信防撤回
  3. 从使用“List list = new ArrayList()”而不是“ArrayList list = new ArrayList()”看面向接口编程
  4. 艾宾浩斯记忆表格excel_好的记忆方法是一切学习的关键(艾宾浩斯记忆法)
  5. php和mysql的概述_PHP的MySQL扩展:MySQL数据库概述_MySQL
  6. nodejs常用指令
  7. Gdiplus byte *数据转换为Bitmap类型图片
  8. 【Linux】39.nslookup查看域名与其对应的ip
  9. 【C++】33.二级指针 **p
  10. 【Linux】1.shell各个命令