MySQL中查询缓存的基础知识有哪些

什么是查询缓存?

mysql 查询缓存虽然在 mysql 5.7 中被弃用(并在 8.0 中删除),但存储以前在内存中运行的语句:换句话说,查询缓存通常将select语句存储在数据库的内存中。因此,如果我们运行一个查询,然后在一段时间后再次运行完全相同的查询,结果将更快地返回,因为它们将从内存而不是从磁盘中检索。

查询缓存缓存查询和结果集。因此,当我们运行相同的查询时,查询缓存的结果会立即返回。查询缓存大小可以通过设置query_cache_size系统变量来控制,但这里有一个警告:如果您希望查询使用查询缓存,它们必须,必须,必须相同,逐字节。这意味着即使您认为这两个查询应该以完全相同的方式缓存:

SELECT * FROM demo_table WHERE column = 'Demo'; 
select * from demo_table where column = 'Demo';

事实上,他们不是。如果 MySQL 查询缓存要求所有查询必须完全相同,那么即使只有一个字节不同,也不会返回任何结果。

所以,总结一下,当 MySQL 执行语句时,它做的第一件事就是检查是否启用了查询缓存(如果需要复习,请回到我们上一篇关于慢速 MySQL 查询的博客文章。)如果查询缓存启用后,MySQL 将首先检查与该查询的任何相关匹配项;如果没有匹配项,MySQL 将继续下一步。若匹配项存在重复,MySQL会从查询缓存中返回结果。

MySQL内部的查询缓存

在此之前返回比赛,MySQL的查询缓存要求MySQL的确认:d OES该用户有必要的权限才能完成这样的动作?我应该拒绝执行查询吗?

以下是 MySQL 检查的权限列表:

特权

简要说明

ALL赋予特定 MySQL 用户所有权限。SELECT授予特定 MySQL 用户从指定数据库中选择行的权限。UPDATE授予特定 MySQL 用户更新指定表中现有行的权限。SHOW DATABASES使特定 MySQL 用户能够获取存在于一个特定 MySQL 实例中的所有 MySQL 数据库的列表。USAGE赋予用户仅使用 MySQL 的权力,这意味着用户不能在其中运行任何查询。本质上是无特权的同义词。

有更多的特权,但你明白了。MySQL会将与表相关的信息和缓存查询一起存储,因此权限对于查询缓存至关重要。权限也很重要,因为它是 MySQL 结果检查过程的第一阶段之一。这是一切的工作原理:

优先识别

MYSQL 状态

知我AI 知我AI

一款多端AI知识助理,通过一键生成播客/视频/文档/网页文章摘要、思维导图,提高个人知识获取效率;自动存储知识,通过与知识库聊天,提高知识利用效率。

知我AI 26 查看详情 知我AI 解释

1MySQL 正在检查查询缓存中的权限。首先,MySQL 检查特定用户是否有权访问特定结果。2MySQL 正在检查查询本身的查询缓存。接下来,MySQL 开始检查查询缓存中是否存在相同的查询。如果匹配,MySQL 返回;如果没有,MySQL 继续下一步。3MySQL 将查询缓存中的条目标记为无效。随着表的变化,查询缓存需要更新。所以在这一步中,MySQL 决定将查询缓存中的条目标记为无效。4发送结果。MySQL 发送缓存的结果并显示它。5将结果存储在缓存中。MySQL 将查询结果保存在查询缓存中。6查询缓存被锁定。缓存过程现在结束——MySQL 锁定查询缓存。

“MySql没有缓存!”:要看查询缓存是否损坏?

如果我们在查询中使用任何变量,无论是在函数还是分区状态下,查询缓存都将变得无效。例如,如果我们正在处理大数据,并且我们使用SELECT … INTO OUTFILE将大数据集加载到 MySQL 中,则结果同样不会被缓存。通常,查询缓存SELECT … [LOCK | FOR | INTO]在使用类似查询时不起作用,如果我们正在检查具有NULL值的列中的AUTO_INCREMENT值,则查询缓存也无法使用,这意味着如果我们有一个increment带有 的列AUTO_INCREMENT,并且我们运行这样的查询所以:

SELECT * FROM demo_table WHERE increment IS NULL;

查询缓存也不会生效。

你说得没错,所有这些特性可能会让一些人感觉它们没用。尽管像 MySQL 中的其他功能一样查询缓存也有自己的限制,因此并非总是有效。除了上述那些,当语句生成警告或语句在带有TEMPORARY存储引擎的表上运行时以及在其他一些极端情况下,它拒绝工作。每次有人向表写入任何内容时,查询缓存也会清空。

查询缓存的功能也取决于query_cache_size参数。此参数越大越好,但请注意,此参数在很大程度上取决于您的内存。请记住,查询缓存的基本结构默认至少需要 40kB 的存储空间,其默认值可能在 1MB 到 16MB 之间。若您的数据库频繁读取数据,则增大参数值可能会有助于找到最佳解决方案,需再进行试验。

您可以使用 “RESET QUERY CACHE” 语句清空查询缓存中的所有内容。如果你使用类似 FLUSH TABLES 的语句,所有的查询缓存值也会被删除。

MySQL 甚至允许您通过运行查询来查看查询缓存中存储了多少查询:

SHOW STATUS LIKE 'Qcache_queries_in_cache%';

您会得到如下所示的结果:

MySQL:

+-------------------------+--------+| Variable_name           | Value  |+-------------------------+--------+| Qcache_queries_in_cache | 1      |+-------------------------+--------+

在这种情况下,我们可以看到我们的查询缓存当前缓存了一个结果。执行类似的语句FLUSH TABLES,所有值都将消失。

以上就是MySQL中查询缓存的基础知识有哪些的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/264910.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
全新智己L6正式上市 预售价21.99万元起 标配四轮转向
上一篇 2026年10月12日 16:44:30
免费获取ESET一年激活码
下一篇 2025年12月2日 06:53:33

相关推荐

  • Linux环境下如何安装MySQL数据库

    Linux环境下如何安装MySQL数据库Linux环境下如何安装MySQL数据库Linux环境下如何安装MySQL数据库Linux环境下如何安装MySQL数据库

    1.概述 mysql二进制安装的优点在于可以在任何路径下安装,且具有良好的灵活性,一台服务器也可以安装多个mysql实例。这种方式的不足之处在于它是在编译过后的,因此性能不如从源代码编译的版本,并且无法灵活地定制编译参数。如果用户即不想安装最简单却不够灵活的rpm包,又不想安装复杂费时的源码包,那么…

    2026年10月12日 • 用户投稿
    000
  • MySQL中创建表时设置自增主键的规则

    在mysql中设置自增主键的方法是:在列定义中添加auto_increment属性。具体步骤包括:1. 创建表时,在需要自增的主键列上添加auto_increment属性,例如create table users (id int auto_increment, primary key (id));2…

    2026年10月12日
    100
  • FreeBSD13中怎么安装MySQL数据库

    FreeBSD13中怎么安装MySQL数据库FreeBSD13中怎么安装MySQL数据库FreeBSD13中怎么安装MySQL数据库FreeBSD13中怎么安装MySQL数据库

    mysql是一个开放源码的小型关联式数据库管理系统,目前mysql被广泛地应用在internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了mysql作为网站数据库。 环境 FreeBSD 13-RELEASE 修改p…

    2026年10月12日 • 用户投稿
    000
  • php如何查询MySQL的8条数据

    PHP是一款非常流行并且实用的编程语言,它可以用于各种不同的项目,从简单Java应用程序到大型Web应用程序。对于许多网站工程师来说,查询数据库中的数据是一个基本的需求,这可以使我们更好地了解网站上的用户行为,以及优化网站的性能。本文将探讨使用PHP编写代码查询8条数据库数据的方法。 在开始之前,您…

    2026年10月12日
    000
  • MySQL中存储的数据查询的时候怎么区分大小写

    MySQL中存储的数据查询的时候怎么区分大小写MySQL中存储的数据查询的时候怎么区分大小写MySQL中存储的数据查询的时候怎么区分大小写MySQL中存储的数据查询的时候怎么区分大小写

    场景描述 今天在将 hive 表同步到 mysql 之后,其中有一列是唯一列,但是在 mysql 中查询的时候 count 与 distinct count 查询出来的数值是不一样的,这么来看的话是有重复的数据(按理说不应该的,因为在 hive 中,这两个数值是一样的),那么将重复的数据查出来看了一…

    2026年10月12日 • 用户投稿
    000
  • MySQL内存不足启动失败怎么解决

    MySQL内存不足启动失败怎么解决MySQL内存不足启动失败怎么解决MySQL内存不足启动失败怎么解决MySQL内存不足启动失败怎么解决

    1.启动MySQL时一直不成功,查看错误日志 /var/log/mysql/error.log 2.主要的错误信息有如下几条: /var/log/mysql/error.log [ERROR] InnoDB: mmap(136151040 bytes) failed; errno 12[ERROR]…

    2026年10月12日 • 用户投稿
    000
  • windows系统mysql压缩包版本安装的方法是什么

    windows系统mysql压缩包版本安装的方法是什么windows系统mysql压缩包版本安装的方法是什么windows系统mysql压缩包版本安装的方法是什么windows系统mysql压缩包版本安装的方法是什么

    下载 下载上面的,下面的不行 解压 我的解压路径 E:Program_filesmysql-5.7.13-winx64本着专业的态度,任何专业软件安装路径都要纯字母。 配置文件 在E:Program_filesmysql-5.7.13-winx64下面创建一个my.ini配置文件 其中的basedi…

    2026年10月12日 • 用户投稿
    300
  • mysql range分区指的是什么

    1、基于给定区间边界,得到若干个连续区间范围,按照分区键的落点,把数据分配到不同的分区。 range分区主要用于日期列的分区。 2、range分区通过使用PARTITION BY RANGE(expr)实现 。 其中expr可以是某个列值,或一个基于某个列值并返回一个整数值的表达式,如YEAR(da…

    2026年10月12日
    100
  • centOS7下mysql插入中文字符报错怎么解决

    在刚装完mysql,就建立了数据库abc,然后新建一个abc表,插入英文没有问题,但是插入中文就有问题,会报错: error 1366 (hy000): incorrect string value: ‘xe4xbdx99xe9x93xb6…’ 应该是数据库编码问…

    2026年10月12日
    100
  • 怎么用SSM+MySql实现仓库管理系统

    系统介绍 该系统为SSM实现在仓库管理系统,实现了供应商管理、经销商管理、商品管理、出库管理、收货单管理等等仓库系统所需在基本功能。系统实现上分层比较明确,操作比较简单。 功能模块 相关技术点 前端:系统前端采用jsp + JavaScript + css的组合开发 后端:SSM框架 数据库:MyS…

    用户投稿 2026年10月12日
    400
  • mysql的事务类型有哪些

    1、mysql的事务分为显式事务和隐式事务。默认的事务是隐式事务,变量autocommit在操作时会自动打开、提交和回滚。 2、显式事务由我们自己控制事务的开启,提交,回滚等操作。 实例 千帆大模型平台 面向企业开发者的一站式大模型开发及服务运行平台 0 查看详情 — 看下当前autocommit…

    2026年10月12日
    100
  • MySQL怎么用分隔符分隔字符串

    MySQL用分隔符分隔字符串 使用 可以使用如下函数 SUBSTRING_INDEX( i.final_car_type, ‘ ‘, 1 ) i.final_car_type 即 需要分隔的字符串 ’ ’ 即 用空格分隔该字符串 1 即:取出该空格之前的所有字符 如果count为正数,那么所得结果为…

    2026年10月12日
    100
  • 怎么用Java和MySQL数据库实现注册和登录

    设计思路 1、数据库设计——在了解用户的需求之后,根据用户的这些需求进行数据库的设计。 2、数据模型——就是把数据库表的结构全都封装在一个类当中。 3、数据处理工具类——根据数据模型给出的需求设计一个工具类来处理数据。 4、视图展示——最后提供给用户一个交互方便的视图界面。 具体设计 1、首先要在数…

    2026年10月12日
    100
  • 怎么删除mysql中的表

    一、删除单个表 删除单个表非常简单。只需使用其中一个 SQL 命令即可删除。 DROP TABLE 指令: 删除表格时,可以使用 DROP TABLE 命令。例如,如果要删除名为“user”的表,命令如下: DROP TABLE user; 使用 DROP TABLE 指令可以删除单个表,如果结果呈…

    2026年10月12日
    100
  • 怎么使用Golang编写MySQL存储过程

    一、为什么使用MySQL存储过程 MySQL存储过程在使用过程中,具有以下优点: 可以这样重写这句话:通过在MySQL服务器端运行存储过程,可以提高应用程序的性能,并避免在应用程序中动态生成SQL语句。这可以减少网络通信的开销和数据库的压力。 程序的可维护性和重用性:存储过程可以被多次调用和重复使用…

    2026年10月12日
    100
  • MySQL怎样处理NULL值 IS NULL与IFNULL函数应用场景

    MySQL怎样处理NULL值 IS NULL与IFNULL函数应用场景MySQL怎样处理NULL值 IS NULL与IFNULL函数应用场景MySQL怎样处理NULL值 IS NULL与IFNULL函数应用场景MySQL怎样处理NULL值 IS NULL与IFNULL函数应用场景

    mysql将null视为“未知”而非0或空字符串,影响查询和计算结果。使用is null判断字段是否为null,ifnull用于替换null值。高效利用索引处理null列时,可建立索引加速is null查询,但大量null值需考虑用特殊值替代或组合索引优化。coalesce是sql标准函数,支持多参…

    2026年10月12日 • 用户投稿
    100
  • MySQL中怎么使用SQL语句判断表是否存在

    判断表是否存在的SQL语句如下: SHOW TABLES LIKE ‘table_name’; 其中,table_name是要判断是否存在的表的名称。 如果该表存在,则会返回一个结果集,否则将返回一个空结果集。可以通过判断结果集的长度来确定表是否存在。 下面是一个基本的PHP函数,用于在MySQL中…

    2026年10月12日
    100
  • Nodejs中koa2怎么连接mysql

    Nodejs中koa2怎么连接mysqlNodejs中koa2怎么连接mysqlNodejs中koa2怎么连接mysqlNodejs中koa2怎么连接mysql

    将查询结果转为对象或者数组 在真实开发中,实际上某些查询结果应该放入到一个对象中 JSON_OBJECT:()中是key-value的形式 SELECT products.id as id, products.title as title, products.price as price, prod…

    2026年10月12日 • 用户投稿
    100
  • MySQL之排序与单行处理函数怎么使用

    1.排序 mysql支持数据排序操作,例如,现在我们按照工资从小到大进行排序操作: mysql> select ename,sal from emp order by sal;+——–+———+| ename | sal |+——–+———+| SM…

    2026年10月12日
    200
  • mysql中SQL的概念是什么

    1、SQL是结构化查询语言。 DML 数据操纵语言 用来操作数据库中所包含的数据 INSERT UPDATE DELETE DDL 数据定义语言 用于创建和删除数据库对象等操作 CREATE DROP ALTER DQL 数据查询语言 用来对数据库中的数据进行查询 SELECT DCL 数据控制语言…

    2026年10月12日
    100

发表回复

登录后才能评论
关注微信