0

0

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

王林

王林

发布时间:2023-05-31 10:35:38

|

1957人浏览过

|

来源于亿速云

转载

什么是查询缓存?

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助手

下载
解释
1 MySQL 正在检查查询缓存中的权限。 首先,MySQL 检查特定用户是否有权访问特定结果。
2 MySQL 正在检查查询本身的查询缓存。 接下来,MySQL 开始检查查询缓存中是否存在相同的查询。如果匹配,MySQL 返回;如果没有,MySQL 继续下一步。
3 MySQL 将查询缓存中的条目标记为无效。 随着表的变化,查询缓存需要更新。所以在这一步中,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修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

664

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

246

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

515

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

255

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

530

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

600

2023.08.14

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

8

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 805人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号