概述

查询缓存(Query Cache,简称QC),存储SELECT语句及其产生的数据结果。闲来无事,做一下这块的总结,也做个备忘!

工作原理

查询缓存工作原理如下:

缓存SELECT操作的结果集和SQL语句,key为sql,value为查询结果集;

如果新的SELECT语句到了,以这个sql为key去缓存中查询,如果匹配,就把缓存的结果集返回;

匹配标准:与缓存的SQL语句是否完全一样,sql中字母区分大小写以及中间的空格,简单理解为存储了一个key-value结构,key为sql,value为sql查询结果,匹配时使用Java的String的equals(),例如:

select age from user 与 select AGE from user不会匹配,因为大小写不同;

select age from use 与 select age from user不会匹配,因为空格不同;

sql两边的空格可忽略,可以认为是对key进行过trim操作之后再进行equals比较。

查看mysql设置参数

执行

show variables like '%query_cache%';

可以看到相关参数:

query_cache_type:0-不启用查询缓存;1-启用,2-启用,默认值为0;

query_cache_size:设置缓存区总大小,允许设置query_cache_size的值最小为40K,默认1M,推荐设置为:64M/128M;

query_cache_limit:限制缓存区最大能缓存的单条查询记录集大小,默认设置为1M

query_cache_type为1时,只要符合查询缓存的要求,客户端的查询语句和记录集都可以缓存起来,如果SQL中加上 SQL_NO_CACHE将不缓存;

query_cache_type为2时,只要SQL中添加了参数:SQL_CACHE,且符合查询缓存的要求,客户端的查询语句和记录集,则可以缓存起来。

查看缓存使用情况

show status like '%Qcache%%';

可以看到相关参数:

Qcache_hits:缓存命中次数;

Qcache_inserts:缓存中插入次数,每缓存一次加1,注意这个不是缓存数量;

开启查询缓存

设置选项query_cache_type = 1 ,同时设置query_cache_size = 67108864;

注:query_cache_size的值设置在100MB以内即可。在MySQL里查询缓存是由一个全局锁在控制,每次更新查询缓存的内存块都需要进行锁定。

关闭查询缓存

设置选项query_cache_type = 0,同时设置query_cache_size = 0。

适用场景

用于频繁提交同一个语句,并且该表数据变化不是很频繁的场景,例如一些静态页面,或者页面中的某块不经常发生变化的信息。

由于查询缓存需要缓存最新数据结果,因此表数据发生任何变化(insert、update、delete或其他可能产生数据变化的操作),都会导致查询缓存被刷新。因而,对于一个更新频率非常低而只读查询频率非常高的场景下,打开查询缓存还是比较有优势的。

不适用场景

查询缓存严格要求2次SQL请求要完全一样,包括SQL语句,连接的数据库、协议版本、字符集等因素都会影响。下面为查询缓存不适用的几个场景:

子查询;

过程、函数、触发器、event中调用的SQL,或者引用到这些结果的;

查询中涉及一些特殊函数时,例如:BENCHMARK()、CURDATE()、CURRENT_TIME()、CURRENT_TIMESTAMP()、NOW()、SLEEP()、CONNECTION_ID()、CURRENT_DATE()、CURRENT_USER()、PASSWORD()、RAND()、UUID()、ENCRYPT()、LAST_INSERT_ID()等等;

查询涉及到mysql,information_schema或performance_schema。

类似SELECT…LOCK IN SHARE MODE、SELECT…FOR UPDATE、SELECT..INTO OUTFILE/DUMPFILE、SELECT * FROM ... WHERE autoincrement_col IS NULL的查询;

SELECT执行计划用到临时表;

未引用任何表的查询,例如SELECT 1+2;

查询产生了告警(warnings);

SELECT语句中存在SQL_NO_CACHE关键字;

涉及到分区表。

可见,使用查询的缓存的限制非常多。当使用场景中以只读为主,很少有更新的情况时,再考虑开启查询缓存。

mysql的查询缓存模式介绍

mysql的查询缓存 查询是数据库技术中最常用的操作.查询操作的过程比较简单,首先从客户端发出查询的SQL语句,数据库服务端在接收到由客户端发来的 SQL语句后, 执行这条SQL语句,然后将查询到的结 ...

mysql数据库查询过程探究和优化建议

查询过程探究 我们先看一下向mysql发送一个查询请求时,mysql做了什么? 如上图所示,查询执行的过程大概可分为6个步骤: 客户端向MySQL服务器发送一条查询请求 服务器首先检查查询缓存,如果命 ...

MySQL关闭查询缓存(QC)的两种方法

MySQL Query Cache 会缓存select 查询,安装时默认是开启的,但是如果对表进行INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP ...

mysql数据库查询pdo的用法

最早的php对mysql数据库查询是mysql和mysqli方法,后来php的新版本进一步封住了该方法,于是又pdo,抛开php框架,使用pdo查询数据,使用也是相当简便 <?php ini_s ...

提高MySQL数据库查询效率的几个技巧(转载)

[size=5][color=Red]提高MySQL数据库查询效率的几个技巧(转)[/color][/size]      MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我 ...

将从mysql数据库查询的信息,遍历到List&lt&semi;&gt&semi;以及一些随机数的生成

将从mysql数据库查询的信息,遍历到List<>以及一些随机数的生成. 代码比较乱,但是方法还是对的,大家又需要的选择看,希望对博友 有帮助,欢迎留言分享! public class s ...

MySQL 数据库查询数据,过滤重复数据保留一条数据---(MySQL中的row&lowbar;number变相实现方法)

转自: http://www.maomao365.com/?p=10564 摘要: 下文讲述MySQL数据库查询重复数据时,只保留一条数据的方法 实现思路: 在MySQL数据库中没有row_numbe ...

关于ORACLE的硬解析和软解析与MySQL的查询缓存query&lowbar;cache探讨

今天在项目中探讨到Oracle对于SQL语句的解析方法以及MySQL相应的处理方法: --------------------------------------------------------- ...

mysql的查询缓存

查询是数据库技术中最常用的操作.查询操作的过程比较简单,首先从客户端发出查询的SQL语句,数据库服务端在接收到由客户端发来的 SQL语句后, 执行这条SQL语句,然后将查询到的结果返回给客户端 ...

随机推荐

直接修改托管堆栈中的type object pointer(类型对象指针)

都知道.NET是一个强对象类型的框架. 那么对于对象类型又是怎么确定的呢. 最初的我简单认为数据的类型就是定义时字段的类型修饰决定的(回来发现这种观点是绝对错误的) 我们知道引用对象存储在托管堆栈中, ...

oracle中的function的简单语法定义

1. create or replace 函数名 (参数名 in 类型) return 返回值类型 as 定义变量 begin 函数体 end;

前端面试angular 常问问题总结

1. angular的数据绑定采用什么机制?详述原理 angularjs的双向数据绑定,采用脏检查(dirty-checking)机制.ng只有在指定事件触发后,才进入 $digest cycle : ...

【转】一个 Linux 上分析死锁的简单方法

简介 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这 ...

Confluence设置MySQL数据库报错:必须使用&&num;39&semi;READ-COMMITTED&&num;39&semi;作为默认隔离级别。

解决方案: mysql -u root -p123456 SET GLOBAL tx_isolation='READ-COMMITTED'; mysql数据库创建 1.设置mysql隔离级别 SET ...

高并发情况下,如何生成分布式全局id

1.使用UUID生成全局id,不占用宽带 2.基于数据库自增或者序列生成全局id,占用宽带,设置自增步长实现集群,但可扩展性差 3.基于redis生成全局id,占用宽度,设置自增步长实现集群,性能比数 ...

学习7&lowbar;&lowbar;STM32--SPI外设之双机通信---

# 整透stm32之spi双机通信(包括双机同为stm32,stm32& others) # 双机通信(全双工) 在主机的MOSI管脚输出1 ...

C&plus;&plus;范围解析运算符&colon;&colon;的使用

1.范围解析运算符的作用范围解析运算符 :: 用于标识不同范围内使用的标识符. 2.范围解析运算符的使用1)用于命名空间和类 namespace NamespaceA{ int x; class Cl ...

Python开发【项目】:RPC异步执行命令(RabbitMQ双向通信)

RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 不懂rpc的请移步h ...

mysql数据库缓存为多久_mysql数据库查询缓存总结相关推荐

  1. mysql的sleep线程多久_MySQL数据库sleep线程过多,怎么办?

    推荐文章 要想知道每个数据库的大小的话,步骤如下:1.进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2.查询所有数据的大 ...

  2. mysql部门人员排序设计_MySQL数据库访问性能优化

    MYSQL应该是最流行的WEB后端数据库.大量应用于PHP,Ruby,Python,Java 等Web语言开发项目中,无论NOSQL发展多么快,都不影响大部分架构师选择MYSQL作为数据存储. MYS ...

  3. mysql怎么定位cpu高_Mysql数据库服务器CPU冲高问题定位及分析

    1.现象概述和初步分析<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /& ...

  4. linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06

    Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06 视频教程学习地址 Oracle/MySQL数据库学习专用QQ群:336282998.189070296 学完风哥本课程能熟悉 ...

  5. mysql数据库函数转义函数_MySql数据库-查询、插入数据时转义函数的使用

    最近在看一部php的基础视频教程,在做案例的时,当通过用户名查询用户信息的时候,先使用了转义函数对客户提交的内容进行过滤之后再交给sql语句进行后续的操作.虽然能看到转义函数本身的作用,但是仍然有一些 ...

  6. mysql数据库64免安装_MYSQL数据库mysql 5.7.18 winx64 免安装 配置方法

    <MysqL数据库MysqL 5.7.18 winx64 免安装 配置方法>要点: 本文介绍了MysqL数据库MysqL 5.7.18 winx64 免安装 配置方法,希望对您有用.如果有 ...

  7. mysql数据库表格怎么建立_mysql数据库表格怎么建立

    我就废话不多说了,大家还是直接看代码吧~create or replace function aa1(a1 integer[],a2 bigint) returns void AS $$declare ...

  8. mysql数据库引擎博客_mysql 数据库引擎常识全集

    1.mysql引擎简介: MyISAM引擎是mysql关系数据库管理系统的默认存储引擎(mysql 5.5以前).这种mysql表存贮结构从的旧的ISAM代码扩展出许多有用的功能.在新版本的mysql ...

  9. Mysql的数据库引擎 区别特点_mysql数据库存储引擎及区别

    MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB).EXAMPLE.FEDERA ...

最新文章

  1. 字符串转数字 sql_SQL注入·sqli-labs·基于错误的字符串/数字型注入(第1~2关)
  2. tensorflow的axis理解
  3. 深度学习手势识别带你玩转神庙逃亡
  4. elasticsearch6.2.2安装中文分词插件IK analyzer
  5. Visual Studio交叉编译器提供对ARM的支持
  6. linux端口 fcs校验,我如何接收错误的以太网帧并禁用CRC / FCS计算?
  7. 关于Kafka中的再均衡
  8. Cordova安装与配置过程中出现的问题及解决办法
  9. 尚品汇笔记——尚硅谷
  10. Property [text] not found on type [java.lang.String]
  11. php去除首尾符号,PHP如何去除头尾字符
  12. 基于 Agora SDK 实现 macOS 端的一对一视频通话
  13. CentOS /Linux 开放80、8080端口或者开放某个端口
  14. 利用 sqlplus spool 实现oracle 导出 csv 文件
  15. Python-Django毕业设计航空订票系统(程序+Lw)
  16. CSS: 潜藏着的BFC
  17. gdb命令行调试相关操作
  18. 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛A题Wasserstein Distance
  19. 零知识证明 - Groth16算法介绍
  20. 利用C 制作公章 续

热门文章

  1. PDM图纸管理软件_PDM图纸管理系统
  2. [GUI] ESP32(idf)触摸屏(XPT2046)驱动及驱动校准
  3. 小程序和公众号消息统一消息发送
  4. 什么是ARM 的big.LITTLE
  5. 音色悦耳的国产百元耳机,工作学习好伙伴,QCY T13体验
  6. OSChina 周三乱弹 ——国庆第四天
  7. 6.1.5 日志管理
  8. [附源码]JAVA+ssm计算机毕业设计蛋糕店会员管理系统(程序+Lw)
  9. 653 Android 8,诺基亚X6手机迎来新的系统固件更新 提升Android 8.1系统流畅性
  10. golang pprof