MySQL--query-cache

知识准备:

  1、mysql 的query-cache是什么?

     mysql可以把执行完成的select 语句和这个select 语句对应的结果集缓存起来;下次再用调用相同的select 语句时就直接返回结果,不是又去执行一次select 语句。

由于少了执行的这一步,所以返回结果比较快。mysql为了保证缓存的结果集与再执行一次select 语句时返回的结果集是一致的,所以;mysql会去判断select语句

用到的表是不有变更,如果有那么缓存的结果集就作废,为了得到正确的结果mysql只能是把select 语句再执行一次;

  2、要注意的地方:

     1、query-cache 是在各个session之间共享的。

     2、query-cache 设置的过大那么它的维护成本也相应的变大,这个时候它反而会影响性能。

3、为了确认query-cache在当前业务场景下是否有用,最好的办法是测试;而且随着时间的推移,之前有用的query-cache不一定一直有用;

4、query-cache只有在select 语句完全相同而且表并没有变更的情况下才会从query-cache中返回结果集,注意这里的相同指的是字节序列

上的相同;也就是说select 和SELECT 会被当成两个不同的东西;select 和select 也有可能会被当成两个不同的东西,因为它们有可以用了

不同的字符集,而这一点我们人眼是看不出来的;

5、如果一个select 查询是某一查询的子查询,那么这个select 的结果也不会被缓存,也就是说query-cache只会缓存最终结果。

6、如果一个select 它是定义在stored function、event、trigger 中的那么它的结果集也不会被缓存。

7、就算是有可用的query-cache 结果集,用户的权限不对的话也不会有返回。

8、表的变更语句包括:insert ,update,delete,truncate table,alter table,drop table,drop database。

9、如果select 中包涵有不确定函数那么结果集也不会缓存。

配置query-cache:

    1、have_query_cache 这个variable 用来检测query_cache是否开启,注意如果是二进制包安装的mysql这个值会永远是YES;所以这并没有什么卵用。

    2、如果要关闭query_cache那么query_cache_size参数query_cache_type参数都要启动的时候设置为0。

    3、query_cache_limit 控制一个结果集的最大大小是多少。

    4、flush query cache 和reset query cache 用于清除query_cache ;它们两效果是等价的。

    5、如果一个查询走的是query-cache 那么Qcache_hits 这个status 会加1、不然Com_select会加1。

  

时间: 2024-08-23 06:31:12

MySQL--query-cache的相关文章

MySQL Query Cache 相关的问题

最近经常有人问我 MySQL Query Cache 相关的问题,就整理一点 MySQL Query Cache 的内容,以供参考. 顾名思义,MySQL Query Cache 就是用来缓存和 Query 相关的数据的.具体来说,Query Cache 缓存了我们客户端提交给 MySQL 的 SELECT 语句以及该语句的结果集.大概来讲,就是将 SELECT 语句和语句的结果做了一个 HASH 映射关系然后保存在一定的内存区域中. 在大部分的 MySQL 分发版本中,Query Cache

mysql query cache优化

query cache原理 当mysql接收到一条select类型的query时,mysql会对这条query进行hash计算而得到一个hash值,然后通过该hash值到query cache中去匹配,如果没有匹配中,则将这个hash值存放在一个hash链表中,同时将query的结果集存放进cache中,存放hash值的链表的每一个hash节点存放了相应query结果集在cache中的地址,以及该query所涉及到的一些table的相关信息:如果通过hash值匹配到了一样的query,则直接将c

mysql query cache 查询缓存

查看本博文,并进行验证(验证结果与博文一致): https://blog.csdn.net/carmazhao/article/details/7088530 mysql默认是开启查询缓存的. 设置查询缓存的内存大小: 查询缓存的命中次数查询: 再执行相同sql4次: 插入数据后: 紧接着执行相同的sql,没有命中查询缓存 插入数据后,第二次执行相同的sql,命中查询缓存 原文地址:https://www.cnblogs.com/hblthink/p/8799229.html

MySQL 之 query cache

早上一打开网站,就看到了Percona官网发布的最新的关于 mysql query cache的文章: https://www.percona.com/blog/2015/08/07/mysql-query-cache-worst-enemy-best-friend/ 还有一篇对其评论的文章: https://blog.gslin.org/archives/2015/08/07/5906/percona-%E5%B0%8D-mysql_query_cache-%E7%9A%84%E6%B8%AC

1011MySQL Query Cache学习笔记

转自:http://blog.chinaunix.net/uid-16844903-id-321156.html 测试环境 MySQL 5.5 innodb_version 1.1.6 MySQL Query Cache就是用来缓存和 Query 相关的数据的.具体来说,Query Cache 缓存了我们客户端提交给 MySQL 的 SELECT 语句以及该语句的结果集.大概来讲,就是将 SELECT 语句和语句的结果做了一个 HASH 映射关系然后保存在一定的内存区域中. mysql> sho

memcached和MySQL的query cache相比

把memcached引入应用中,还是需要不少工作量的.MySQL有个使用方便的query cache,可以自动地缓存SQL查询的结果,被缓存的SQL查询可以被反复地快速执行.Memcached与之相比,怎么样呢?MySQL的query cache是集中式的,连接到该query cache的MySQL服务器都会受益. * 当您修改表时,MySQL的query cache会立刻被刷新(flush).存储一个memcached item只需要很少的时间,但是当写操作很频繁时,MySQL的query c

RDS for MySQL查询缓存 (Query Cache) 的设置和使用

https://help.aliyun.com/knowledge_detail/41717.html?spm=5176.7841698.2.11.aCvOXJ RDS for MySQL查询缓存 (Query Cache) 的设置和使用 功能和适用范围 原理 限制 设置 验证效果 1. 功能和适用范围 功能: 降低 CPU 使用率 降低 IOPS 使用率(某些情况下) 减少查询响应时间,提高系统的吞吐量 适用范围: 表数据修改不频繁.数据较静态 查询(Select)重复度高 查询结果集小于 1

关闭mysql查询缓存query cache(用户测试性能)

先对query cache进行查询 mysql> show global variables like '%cache%'; 查看query_cache_size.query_cache_type的值 临时修改,重启后将还原默认. mysql> set global query_cache_size=0; mysql> set query_cache_type=0; 备注:query_cache_size是一个全局变量,必须加global:query_cache_type可加可不加 永久

在MySQL query browser中要导出execl表单

导出:  在MySQL query browser中要导出execl表单,只需要点击file,选择export execl就可以了(要先进入表单哦!). 导入: 数据库的数据太多一下导入有点麻烦,如何将excel的数据直接导入数据库呢? 第一步 另存为txt文档,名字最好为数据库的table名.  在这我们要保存问文本文件用制表符分割的那个,这样我们的数据就不会乱. 第二步 打开txt文档,点击另存为,修改编码,解决中文utf8.  这个时候的文件名必须和你要导入的table名称一样,否则在lo

UCenter info: MySQL Query Error的解决方法----For Discuz!

备注: 出现这个问题同时会造成论坛注册,登录和发帖时等页面无法跳转(APP1运行不正常) 案例: UCenter info: MySQL Query Error SQL:SELECT * FROM [Table]notelist WHEREclosed='0' AND app1<'1' AND app1>'-5' LIMIT 1 Error:Unknown column 'app1' in 'whereclause' Errno:1054 分析: 错误是说在UCenter数据库的notelis