mysql的逻辑架构图如下:

当开启查询缓存时,mysql会将查询结果缓存到查询缓存区域,结果对应的key是使用查询语句,数据库名称,客户端协议的版本等因素算出的一个hash值。

在下次查询时,根据一些条件计算出hash值,如果能与引用表中的数据相关联,则表示查询命中。

可以通过如下sql查看查询缓存的状态。

show variables like '%query_cache%';

MYSQL提供了一些参数来控制查询缓存的行为,参数如下

·              query_cache_limit

MYSQL能够缓存的最大查询结果,查询结果大于该值时不会被缓存。默认值是1048576(1MB)

如果某个查询的结果超出了这个值,Qcache_not_cached的值会加1,如果某个操作总是超出可以考虑在SQL中加上SQL_NO_CACHE来避免额外的消耗

·              query_cache_min_res_unit

查询缓存分配的最小块的大小(字节)。 默认值是4096(4KB)。

·              query_cache_size

为缓存查询结果分配的内存的数量,单位是字节,且数值必须是1024的整数倍。默认值是0,即禁用查询缓存。请注意即使query_cache_type设置为0也将分配此数量的内存。

·              query_cache_type

设置查询缓存类型。设置GLOBAL值可以设置后面的所有客户端连接的类型。客户端可以设置SESSION值以影响他们自己对查询缓存的使用。下面的表显示了可能的值:

选项

描述

0或OFF

不要缓存或查询结果。请注意这样不会取消分配的查询缓存区。要想取消,你应将query_cache_size设置为0。

1或ON

缓存除了以SELECT SQL_NO_CACHE开头的所有查询结果。

2或DEMAND

只缓存以SELECT SQL_NO_CACHE开头的查询结果。

该变量默认设为ON。

·              query_cache_wlock_invalidate

一般情况,当客户端对MyISAM表进行WRITE锁定时,如果查询结果位于查询缓存中,则其它客户端未被锁定,可以对该表进行查询。将该变量设置为1,则可以对表进行WRITE锁定,使查询缓存内所有对该表进行的查询变得非法。这样当锁定生效时,可以强制其它试图访问表的客户端来等待。

查询缓存的优化

当开启了查询缓存的功能后,可以通过一些参数以及状态值来观察查询缓存的使用情况。

流程以及涉及到的参数参见下图

查询缓存的优化

除了上图提到的一些优化策略外,还可以通过下面的措施来提高查询缓存的效率

·              尽量用小表的简单替代大表的复杂查询

·              尽量用批量写入取代单条写入

·              控制query_cache_size的大小,甚至是禁用查询缓存

·              通过DEMAND+SQL_CACHE/SQL_NO_CACHE来灵活控制某个select是否需要进行缓存

·              对于写密集型的应用,直接禁用查询缓存

转载于:https://www.cnblogs.com/asfeixue/p/9238404.html

mysql(五)查询缓存相关推荐

  1. mysql query 查询失败_如何在mysql进行查询缓存及失败的解决方法

    都知道函数在使用前需要弄清楚参数的属性,这样才能对函数的使用有较好的了解.有些小伙伴学习了查询缓存后,直接进行了下一步的实战操作.这里小编想提醒大家,开始操作之前一定要先设置参数,不然就会出现问题.下 ...

  2. MySQL的查询缓存

    MySQL的查询缓存: MySQL查询缓存用户保存查询语句返回的结果,省去了分析,优化,查询的操作. 如何缓存数据? 将MySQL的查询的SQL语句使用hash加密算法加密保存为key,查询的结果保存 ...

  3. MySQL高级 - 查询缓存 - 开启查询缓存

    开启查询缓存 MySQL的查询缓存默认是关闭的,需要手动配置参数 query_cache_type , 来开启查询缓存.query_cache_type 该参数的可取值有三个 : 值 含义 OFF 或 ...

  4. MySQL高级 - 查询缓存 - 概述及流程

    Mysql中查询缓存优化 概述 开启Mysql的查询缓存,当执行完全相同的SQL语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存. 操作流程 ...

  5. mysql中查询缓存优化以及慢查询

    1. 概述 开启Mysql的查询缓存,当执行完全相同的SQL语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存 2. 操作流程 1.客户端发送 ...

  6. mysql查询优化-查询缓存

    mysql如何判断缓存是否命中 缓存使用的是一个引用表,通过一个哈希值的引用,这个哈希值包括了,当前要查询的数据库,客户端协议,查询本身等 当判断缓存是否命中时,mysql是不会解析,优化的,使用的是 ...

  7. 清空缓存的命令_超详细的mysql数据库查询缓存原理解析、涉及命令、流程分析等...

    概述 mysql查询缓存在数据库优化可以起到很大的作用,今天主要针对这一块做一个总结,下面一起来看看吧~ 一.缓存条件,原理 MySQL Query Cache是用来缓存我们所执行的SELECT语句以 ...

  8. mysql数据库查询缓存_MySQL查询缓存与数据库管理

    MySQL查询缓存与数据库管理 上一篇 / 下一篇  2010-01-25 21:51:07 / 个人分类:MYSQL/Cache MySQL查询缓存 注意:查询缓存绝不返回过期数据. 如果一个表发生 ...

  9. MySQL高级 - 查询缓存 - 失效场景

    查询缓存失效的情况 1) SQL 语句不一致的情况, 要想命中查询缓存,查询的SQL语句必须一致. SQL1 : select count(*) from tb_item; SQL2 : Select ...

  10. MySQL高级 - 查询缓存 - 配置参数

    查询缓存配置 查看当前的MySQL数据库是否支持查询缓存: SHOW VARIABLES LIKE 'have_query_cache'; 查看当前MySQL是否开启了查询缓存 : SHOW VARI ...

最新文章

  1. Swift Tips - 在 Swift 中自定义下标访问
  2. uniapp光标自动定义到文本框_如何在Mac上的照片应用中创建自定义日历
  3. 树莓派远程连接的三种方式总结
  4. 机器学习:神经网络矩阵形式,向量形式,矩阵求导
  5. 【二分】最大均值(ybtoj 二分-1-3)
  6. Fedora 安装后需要做的第一件事
  7. python牛顿法解非线性方程组_萌新请教牛顿法求解三元非线性方程组
  8. Kudu : 删除了不存在的数据报错 status=Not found: key not found (error 0)
  9. a6gpp php,内行人才知道的古董级玛莎拉蒂A6G 2000
  10. JSP自定义标签rtexprvalue属性 1
  11. JSP WEB开发入门基础到高手进阶教程001
  12. 全球酷站中心 html5网站,除了Behance,还有哪些优质设计资源站
  13. win10系统更新服务器出错怎么办,win10系统正式版自动更新出错的解决方法
  14. 切片器可以设置日期格式?_excel神器——切片器
  15. php酷狗音乐API接口,酷狗音乐抓取api
  16. elasticsearch2.4.2安装(2) --插件marvel
  17. 铝板展开插件_钣金件快速绘图与展开程序CAD插件(钣金展开插件工具)Vr2.10 最新版...
  18. Java length() 方法、length 属性和 size() 方法有什么区别?
  19. 火爆外网的ChatGPT,改Bug,敲代码不在话下
  20. 《Linux那些事儿之我是USB》我是U盘(1)小城故事

热门文章

  1. Spark UDF用户自定义函数
  2. UIApplicaton详情
  3. python能处理图片吗_python图片处理(一)
  4. apache安装 windows
  5. 每日命令:(13)more
  6. 一维数组的求平均成绩 Day06
  7. 一个新手上课的路程!!!
  8. 求数列的和 AC 杭电
  9. 【转】头文件和库文件区别
  10. 设计模式 - Strategy