mysql(五)查询缓存
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(五)查询缓存相关推荐
- mysql query 查询失败_如何在mysql进行查询缓存及失败的解决方法
都知道函数在使用前需要弄清楚参数的属性,这样才能对函数的使用有较好的了解.有些小伙伴学习了查询缓存后,直接进行了下一步的实战操作.这里小编想提醒大家,开始操作之前一定要先设置参数,不然就会出现问题.下 ...
- MySQL的查询缓存
MySQL的查询缓存: MySQL查询缓存用户保存查询语句返回的结果,省去了分析,优化,查询的操作. 如何缓存数据? 将MySQL的查询的SQL语句使用hash加密算法加密保存为key,查询的结果保存 ...
- MySQL高级 - 查询缓存 - 开启查询缓存
开启查询缓存 MySQL的查询缓存默认是关闭的,需要手动配置参数 query_cache_type , 来开启查询缓存.query_cache_type 该参数的可取值有三个 : 值 含义 OFF 或 ...
- MySQL高级 - 查询缓存 - 概述及流程
Mysql中查询缓存优化 概述 开启Mysql的查询缓存,当执行完全相同的SQL语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存. 操作流程 ...
- mysql中查询缓存优化以及慢查询
1. 概述 开启Mysql的查询缓存,当执行完全相同的SQL语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存 2. 操作流程 1.客户端发送 ...
- mysql查询优化-查询缓存
mysql如何判断缓存是否命中 缓存使用的是一个引用表,通过一个哈希值的引用,这个哈希值包括了,当前要查询的数据库,客户端协议,查询本身等 当判断缓存是否命中时,mysql是不会解析,优化的,使用的是 ...
- 清空缓存的命令_超详细的mysql数据库查询缓存原理解析、涉及命令、流程分析等...
概述 mysql查询缓存在数据库优化可以起到很大的作用,今天主要针对这一块做一个总结,下面一起来看看吧~ 一.缓存条件,原理 MySQL Query Cache是用来缓存我们所执行的SELECT语句以 ...
- mysql数据库查询缓存_MySQL查询缓存与数据库管理
MySQL查询缓存与数据库管理 上一篇 / 下一篇 2010-01-25 21:51:07 / 个人分类:MYSQL/Cache MySQL查询缓存 注意:查询缓存绝不返回过期数据. 如果一个表发生 ...
- MySQL高级 - 查询缓存 - 失效场景
查询缓存失效的情况 1) SQL 语句不一致的情况, 要想命中查询缓存,查询的SQL语句必须一致. SQL1 : select count(*) from tb_item; SQL2 : Select ...
- MySQL高级 - 查询缓存 - 配置参数
查询缓存配置 查看当前的MySQL数据库是否支持查询缓存: SHOW VARIABLES LIKE 'have_query_cache'; 查看当前MySQL是否开启了查询缓存 : SHOW VARI ...
最新文章
- Swift Tips - 在 Swift 中自定义下标访问
- uniapp光标自动定义到文本框_如何在Mac上的照片应用中创建自定义日历
- 树莓派远程连接的三种方式总结
- 机器学习:神经网络矩阵形式,向量形式,矩阵求导
- 【二分】最大均值(ybtoj 二分-1-3)
- Fedora 安装后需要做的第一件事
- python牛顿法解非线性方程组_萌新请教牛顿法求解三元非线性方程组
- Kudu : 删除了不存在的数据报错 status=Not found: key not found (error 0)
- a6gpp php,内行人才知道的古董级玛莎拉蒂A6G 2000
- JSP自定义标签rtexprvalue属性 1
- JSP WEB开发入门基础到高手进阶教程001
- 全球酷站中心 html5网站,除了Behance,还有哪些优质设计资源站
- win10系统更新服务器出错怎么办,win10系统正式版自动更新出错的解决方法
- 切片器可以设置日期格式?_excel神器——切片器
- php酷狗音乐API接口,酷狗音乐抓取api
- elasticsearch2.4.2安装(2) --插件marvel
- 铝板展开插件_钣金件快速绘图与展开程序CAD插件(钣金展开插件工具)Vr2.10 最新版...
- Java length() 方法、length 属性和 size() 方法有什么区别?
- 火爆外网的ChatGPT,改Bug,敲代码不在话下
- 《Linux那些事儿之我是USB》我是U盘(1)小城故事