保存查询返回的完整结果。当查询命中该缓存,MySQL会立即返回结果,跳过解析、优化和执行阶段。

官方在特定环境测试结果(官方文档中有详细说明):

1.如果对某表进行简单查询,但每次查询条件都不一样时,打开查询缓存会导致性能下降13%。

2.如对一个只有一行数据的表进行查询,则可以提升238%。

所以查询缓存特别适用于更新频率非常低、查询频率非常高的场景。

缓存命中规则

缓存存放在一个引用表中,通过一个哈希值引用,哈希值包含了(查询本身、当前查询的数据库、客户端协议的版本等)。

判断是否命中时,MySQL不会解析语句,而是直接使用SQL语句和客户端发送来的其他原始信息。任何字符上的不同都会导致缓存不命中。

如果查询语句中包含任何的不确定函数则不会缓存(如NOW()),因为在执行这个查询之后,MySQL会禁止缓存该查询,所以在查询缓存中是不可能找到缓存结果的。

什么情况下查询缓存能发挥作用

并不是所有情况下查询缓存都能提高系统性能。打开查询缓存对读和写操作都会带来额外消耗:

读查询在开始之前必须先检查是否命中缓存。

如果这个读查询可以被缓存,那么当完成执行后,需要将结果存入缓存。

每次写入操作时,需要将对应表的所有缓存都设置失效。如果缓存较大或碎片很多,则会带来很大消耗。

缓存命中率:

SHOW STATUS中能提供一个全局的性能指标用以计算缓存命中率:

每次SELECT查询,要么增加Qcache_hits(查询缓存命中次数),要么增加Com_select(无缓存的查询次数+错误查询+权限检查查询),所以命中率计算公式:Qcache_hits / (Qcache_hits + Com_select)。

缓存配置和维护

query_cache_type:是否打开查询缓存。可以设置为(OFF、ON、DEMAND)。DEMAND表示只有在查询语句中明确标记SQL_CACHE的语句才放入查询缓存。

query_cache_size:查询缓存使用总空间。

query_cache_min_res_unit:在查询缓存中分配内存块的最小单位。

query_cache_limit:MySQL能缓存的最大查询结果。

query_cache_wlock_invalidate:如果某个数据表被其他的连接锁住,是否仍然从查询缓存中返回结果。

指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察:

SHOW VARIABLES LIKE '%query_cache%';

SHOW STATUS LIKE 'Qcache%';

mysql 查看某个表缓存情况_MySQL 查询缓存 QUERY_CACHE相关推荐

  1. mysql查看数据库表大小语句_MySQL查看数据库表容量大小的命令语句讲解

    MySQL查看数据库表容量大小的命令语句讲解 发布时间:2020-04-27 14:17:23 来源:亿速云 阅读:180 作者:三月 本文主要给大家介绍MySQL查看数据库表容量大小的命令语句讲解, ...

  2. mysql 查询缓存设置_MySQL查询缓存设置 提高MySQL查询性能

    从 MySQL4开始,出现了QueryCache查询缓存,如果使用了QueryCache,当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提 ...

  3. mysql 缓存优缺点_MySQL查询缓存的优缺点

    任职DBA一年多了,更正下博客. 其实MySQL8.0已经取消了查询缓存.如果是小型项目,又不想用Reids或者MC等缓存,查询结果相对固定,可以在MySQL5.7以下版本设置缓存. ######## ...

  4. mysql缓存 碎片_Mysql查询缓存碎片、缓存命中率及Nagios监控

    Mysql 的优化方案,在互联网上可以查找到非常多资料,今天对Mysql缓存碎片和命中率作了详细了解,个人作了简单整理. 一.Mysql查询缓存碎片和缓存命中率. mysql> SHOW STA ...

  5. mysql 查看所有表的引擎_MySQL查看数据库、表的占用空间大小以及某个库中所有表的引擎类型...

    本文章来给大家介绍一些常用的MySQL查看数据库.表的占用空间大小sql命令吧,希望此教程 对各位同学会有所帮助. 查看各库的大小代码如下复制代码 SELECT SUM(DATA_LENGTH)+SU ...

  6. mysql查看数据表是否损坏_mysql 检查数据库是否损坏

    MySQL主从复制之主库宕机处理 主库宕机  Master DOWN机-企业场景一主多从宕机从库切换主继续和从同步过程详解 登陆从库,show processlist; 查看两个线程的更新状态: 查看 ...

  7. mysql查看数据库表的基本命令_mysql查看数据库、表的基本命令

    1. show databases 查看所有的数据库,等同于select schema_name from information_schema.schemata\G \G 替换;,以纵向报表的形式输 ...

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

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

  9. MySQL查看数据库表容量大小

    本文介绍MySQL查看数据库表容量大小的命令语句,提供完整查询语句及实例,方便大家学习使用. 1.查看所有数据库容量大小 select table_schema as '数据库', sum(table ...

最新文章

  1. EBS fnd_global.apps_initialize
  2. Linux下如何查看tomcat是否启动/系统日志等
  3. VC实现将对话框最小化到系统托盘
  4. Apache ZooKeeper - 事件监听机制详解
  5. Nettiers快速使用入门(一) 数据库
  6. Linux工作笔记-根据PID查询进程是否存在(进程管理相关程序中常用)
  7. GIT学习笔记1--基本使用
  8. 【环境搭建005】UBUNTU13.04 android4.08 源码编译实践中遇到的问题
  9. python中exit 的作用_Python退出命令-为什么要使用这么多?何时使用每个命令?
  10. eeprom和编程器固件 k2_瞎鸡儿折腾之K2/K2P刷机,刷入第三方固件,傻吊教程!
  11. MySQL数据库语句
  12. 抗衡微软,UCDOS失策了,金山系软件完胜,不是WPS
  13. 给系统闹钟设置时间Alarm
  14. javaScript实现简单网页倒计时代码
  15. C/C++ 银行账户管理系统
  16. java导出功能(多个sheet页数据导出)
  17. F - Assassin’s Creed
  18. 将本地镜像发布到阿里云仓库
  19. VMware -- 克隆虚拟机
  20. (C语言实现)页面置换——先进先出算法(FIFO)

热门文章

  1. C#开发微信门户及应用(9)-微信门户菜单管理及提交到微信服务器
  2. node使用npm一句命令停止某个端口号 xl_close_port
  3. Vmware iSCSi 配置
  4. php arraymap()函数
  5. JDBC常见面试题集锦(一)
  6. Transaction事务注解和DynamicDataSource动态数据源切换问题解决
  7. spring中的quartz调度问题
  8. python pip 报错 Command “python setup.py egg_info“ failed with error code 1 解决方法
  9. linux shell IFS分隔符 简介 IFS=$‘\n‘ 使用换行符做分隔符
  10. linux c 编译报错 Compile error : undefined reference to‘__atomic_fetch_add_4’ 解决方法