今天我们来说说MySQL的缓存机制

news2024/9/21 18:48:00

原文链接:http://www.ibearzmblog.com/#/technology/info?id=5770c555acd4302f81d86976c06e2319

前言

当我们向数据库服务器发送一条SQL的时候,但数据库收到后就会执行,但是如果在短时间内都执行同一条SQL,如果每次数据库都会执行,并且每次执行的结果都是一样,那就有点多余。

所以MySQL就会将查询的结果缓存起来,后面的相同查询将会直接返回结果。

这篇文章也是我查官方文档的一个笔记。

这是官方中文文档:https://www.mysqlzh.com/

简介

查询缓存存储SELECT查询的文本以及发送给客户端的相应结果。如果随后收到一个相同的查询,服务器从查询缓存中重新得到查询结果,而不再需要解析和执行查询。如果你有一个不经常改变的表并且服务器收到该表的大量相同查询,查询缓存在这样的应用环境中十分有用。对于许多Web服务器来说存在这种典型情况,它根据数据库内容生成大量的动态页面。 -----摘自官方文档

工作原理

当开启缓存后,SQL语句的解析会有所不同,比如会区分大小写:

select * from table_name
SELECT * FROM table_name

上面的两条SQL会被认为不同,查询SQL必须是每个字都一样的,同样,使用不同的数据库、字符集也会影响解析,一旦发现两条SQL不是完全一致,那么就会分别缓存。

缓存失效

那么缓存后的数据失效的情况也有几种。

表发变化

当表发生变化的时候,那么涉及到该表的所有缓存数据将会失效。例如我们常用的insert、delete、update、alter等等。

使用函数

使用下面函数的话,不会被放入缓存。我这里就直接从官网摘下来:

BENCHMARK()CONNECTION_ID()CURDATE()CURRENT_DATE()
CURRENT_TIME()CURRENT_TIMESTAMP()DATABASE()NOW()
带一个参数的ENCRYPT()FOUND_ROWS()GET_LOCK()LAST_INSERT_ID()
LOAD_FILE()MASTER_POS_WAIT()RAND()RELEASE_LOCK()
不带参数的UNIX_TIMESTAMP()USER()

其他条件

  • 引用自定义函数
  • 引用自定义变量
  • 引用系统表

查询缓存

可以通过SQL语句来查询结果是否被缓存:

SQL_CACHE,如果查询结果中query_cache_type的值为ON或DEMAND,那么结果就为已缓存。

SELECT  SQL_CACHE,id, name FROM user_info;

开启缓存

首先我们可以执行下面的语句查看缓存是否可用

SHOW VARIABLES LIKE 'have_query_cache';


可以看到,这里为YES,但这不意味着缓存已开启。

同时我们也可以通过query_cache_size来设置缓存大小,当设置为0的时候表示缓存禁用。同时,如果设置大于0的时候,查询缓存至少需要大于40KB来进行分配,设置少的话会得到警告信息,所以我们设置需要大于40KB。

我们先看看当前缓存大小设置是多少。

SHOW VARIABLES LIKE 'query_cache_size';


Value为0,那么说明当前缓存是被禁用的。

那么现在我们先将他改为1MB,然后再看看query_cache_size变量的值:

set @@global.query_cache_size=1000000;
SHOW VARIABLES LIKE 'query_cache_size';


可以看到,已经设置成功。

设置完query_cache_size的值后,query_cache_type变量为工作方式,主要有三种:

  • 0或OFF将阻止缓存或查询缓存结果
  • 1或ON将允许缓存,以SELECT SQL_NO_CACHE开始的查询语句除外
  • 2或DEMAND,仅对以SELECT SQL_CACHE开始的那些查询语句启用缓存

query_cache_type设置的工作方式为后续客户端操作的缓存策略,所以需要好好设置。

结尾

MySQL的缓存设置在一定程度上减少磁盘IO的操作,也是一种提高性能的手段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CUDA和显卡驱动以及pytorch版本的对应关系

1 支持CUDA 的GPU 支持 CUDA 的 NVIDIA Quadro 和 NVIDIA RTX CUDA GPU | NVIDIA Developer您的 GPU 计算能力 您是否正在寻找 GPU 的计算能力然后查看以下表格。您可以在这里了解更多 计算能力 。 NVIDIA GPU 为全球数百万台台式机笔记本电脑工作站和超级计算机提供动力加速…

《计算机网络——自顶向下方法》精炼——4.4.3-4.4.5

学习是终身的职业。在学习的道路上,谁想停下来就要落伍。 文章目录 UPnP因特网控制报文协议(ICMP)IPv6IPv6数据报格式IPv4到IPv6的变革 UPnP 通用即插即用(UPnP)提供了一种让外部网络的主机与NAT内主机交换数据的方式…

六十分之十七———低头拉车后的抬头看路

目录 前言:一、目标二、计划三、完成情况四、提升改进(最少3点)五、意外之喜(最少2点)六、总结 前言: 距离上次的月总已经过去四个多月时间了,这段时间里又是一次阶段性的下沉和突破,于是也就有了现在的总结。 此时还想将自己17…

未来10年,网络安全人才就业的黄金期

随着大数据、物联网、人工智能等新技术的发展,信息技术与经济社会各领域的融合也更加深入。网络攻击行为日趋复杂、黑客攻击行为组织性更强、针对手机无线终端的网络攻击日趋严重,近几年有关网络攻击和数据泄露的新闻层出不穷。因此,随着国家…

Planning-oriented Autonomous Driving 解析

abstract 现代自动驾驶系统通常是模块化的序列任务,这种方式很容易造成累积误差和任务协调不足,因此设计一个端到端架构,从全局的视角出发为agent的交互提供互补的特征提取。 introduction (a) Most industrial solutions deploy separate …

【QQ界面展示-获取监听到的通知的具体内容 Objective-C语言】

一、获取监听到的通知的具体内容 1.刚才这个没说啊,给大家补充一下, 我们看一下,刚才我们只说了一个通知的发布、和移除吧, 刚才我们这里,只是说了一个通知的发布、和移除吧, 以及监听, 那么,大家有没有发现, 我们一开始,给大家介绍的时候,是不是有两个对象啊,…

关于手机Camera的硬件电路知识

前阶段,小白教同事测了些Camere的基本功耗。正愁不知道写什么的小白,突然想到了素材,于是乎便趁着周末雷雨天宅家之际,写一篇关于手机Camere的硬件文章。 手机Camera 一、工作原理 关于Camera,景物通过镜头生成光学…

CRM软件能否代替Excel进行客户管理?

很多销售习惯使用Excel表格来管理客户,觉得这样既简单又方便。但随着客户的增多,使用Excel表格管理客户会带来很多问题。因此,客户管理不用Excel表格用CRM软件,是一种更加明智的选择。 1、统一管理数据 数据是企业的命脉。一旦客…

Python二级综合应用题:通讯录管理

Python二级考试中的最后一题一般是压轴题,有一定的难度,而且分值也高。此题一般分为1~3个问题,步步为赢,才能更好地解决。遇到这种问题,首先是不要怕,能解决几步是几步。今天我们一个通讯录管理题来说明一下…

Unbuntu下载Clion并配置Cmake工具

Clion 下载CLion安装Cmake工具 下载CLion 如果使用的是Unbuntu系统,一行命令就搞定了 sudo snap install clion --classic其他系统的下载方法就不在这里记载了 安装Cmake工具 刚下好Clion的时候,打开之后,如果没有Cmake工具.Clion是不会帮…

父亲节礼物:用Python编写一个小型游戏

名字:阿玥的小东东 学习:Python、C/C 主页链接:阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 安装必要的库 绘制游戏界面 添加游戏元素 为游戏添加交互性 结论 一、父亲节的来历简介 二…

taskAffinity、launchMode 与 flag

1、官方文档 public static final int FLAG_ACTIVITY_CLEAR_TASK 如果在传递给 的意向中设置,则 此标志将导致与 在活动开始之前要清除的活动。即活动 成为原本为空的任务和任何旧活动的新根 都完成了。这只能与 结合使用。Context.startActivity()FLAG_ACTIVITY_NE…

Kubernetes Blog 更新:DaoCloud 为数字世界寻找全局最优解

“ 近日,一篇名为《「DaoCloud 道客」与 Kubernetes--为数字世界寻找全局最优解》的博文,在 Kubernetes 的全球官网上线(链接:https://kubernetes.io/case-studies/daocloud/),下面一起来了解一下具体内容…

ArcEngine二次开发0——入门(下载 部署 组件学习)

折腾一下ArcGIS Engine二次开发。 目录 1、开发环境配置2、部署一个ArcGIS Engine应用程序3、ArcObject组件学习4、报错及解决4、其他 1、开发环境配置 参考:https://blog.csdn.net/H48662654/article/details/113384150 (使用ArcEngine前,…

时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测

时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测 目录 时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测效果一览基本介绍程序设计学习总结参考资料 效果一览 基本介绍 Matlab实现SO-ELM蛇群算法优化极限学习机时间序列预测 1.data为单变量时间…

拿捏指针(三)--- 对指针的高级认识(高级)

函数指针 函数指针的定义 通过对 对指针的基本认识 和 对指针的进阶认识 我们知道,整型指针是指向整型的指针,数组指针是指向数组的指针,其实,函数指针就是指向函数的指针。 和学习数组指针一样,学习函数指针我们也需…

【WebPack】前端工程化

文章目录 前端工程化一、前端工程化概念二、前端工程化优点三、前端工程化解决方案四、webpack 的基本使用4.1 什么是 webpack4.2 创建列表隔行变色项目4.3 安装 webpack4.4 配置 webpack4.5 自定义 打包入口与出口 五、webpack 的插件使用5.1 webpack 常见插件5.2 webpack-dev…

【Linux】进程优先级

目录 进程优先级什么叫做优先级?Linux优先级更改优先级 进程优先级 什么叫做优先级? cpu资源分配的先后顺序,就是指进程的优先权(priority)。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用…

imx6ull固化和更新uboot、zImage和dtb方法---超详细总结

目录 一、固化系统 1. 使用mfgtool上位机固化系统 1.1 mfgtool固化系统到 SD 卡 1.2 mfgtool固化系统到 eMMC 1.3 mfgtool固化系统到 NAND FLASH 2.使用脚本固化系统 2.1脚本固化系统到 SD 卡 2.2 脚本固化系统到 eMMC 2.3 脚本固化系统到 NAND FLASH 二、更新系统 …

用Midjourney画“球迷冲进球场拥抱梅西“事件

作者 | 兔子酱 最近,被“球迷冲进球场拥抱梅西”刷屏了!在阿根廷对战澳大利亚北京工体友谊赛上,一名中国“狂热少年”冲进球场,成功拥抱了梅西,甚至摆出了拍照姿势。拥抱后在球场狂奔,还有大马丁击了掌,最后…