MySQL数据库缓存query_cache 19

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【7月更文挑战第19天】MySQL数据库缓存query_cache

一般情况下,我们不会用到数据库自带的缓存,所以 MySQL 默认是不开启缓存的。只有以读为主的业务,数据不变化的情况下,可以开启数据库的缓存。

查看缓存是否开启:


show variables like 'query_cache%';

queyr_cache_type:on,表示缓存开启,默认是关闭的,可以通过修改 MySQL 配置文件 my.cnf 进行调整,重启服务后生效。

query_cache_limit:1048576,表示单词查询缓存的结果集大小1M,超过1M则不会缓存。

query_cache_size,表示缓存开辟的空间大小。

查看缓存操作情况:


show status like 'Qcache%';

Qcache_hits:表示缓存命中次数

Qcache_inserts:表示缓存写入次数

缓存生效的条件是在缓存开启的情况下,执行的sql 语句字符串一模一样的时候,可以从缓存直接读取数据,但是当缓存数据相关的表存在数据变化的时候,原有的缓存就会失效,需要重新写入缓存。

MySQL 的缓存开启后,当 sql 查询语句带有 sql_no_cache 关键字或者带有函数操作或者单次查询结果集超过 query_cache_limit 的设置的值或者查询系统表时,不会用到缓存。

我们在开发中,最好不要开启缓存,将 query_cache_type 设置为off,query_cache_size 设置为 0;缓存一般会用 Redis 方案来替代。

正确合理的创建索引是提升数据库查询性能的基础,因此针对数据库来说,索引是必须要掌握的。


1、数据库索引的本质



我们一说到索引,如果大家想到是一个类似于字典的目录,可以提高数据库查询的性能,那么这个理解还是太表面了,也就是说对索引的作用有了解,对它的本质还是不够了解。

数据库索引的本质是一种数据结构,是数据库管理系统(DBMS)中一个排序的数据结构,目的是为了提升对数据库表中的记录行的检索速度,以协助快速查询、更新数据库表中数据,而创建的一种数据结构。

实际上,建立索引会占用磁盘空间的索引文件,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录地址。

使用索引提升查询效率的 3 个特点:

1、索引能极大的减少存储引擎需要扫描的数据量,从而提升查询效率;

2、索引可以把随机 IO 变成顺序 IO,从而提升查询效率;

3、索引在进行分组、排序操作时避免使用临时表,从而提升查询效率;

2、MySQL 中 B+Tree 索引的实现方式、


1、Myisam 存储引擎中的实现


.frm 表定义文件:每一个存储引擎都有这个文件

.myd 数据文件:d 代表 data,数据库表中的数据保存在这个文件

.myi 索引文件:i 代表 Index,索引保存在这个文件

Myisam 引擎的数据文件与索引文件是分开的,在.myi 索引文件中无论是主键索引还是辅助索引,其叶子节点保存的是.myd 数据文件中的数据行的地址指针,因此 Myisam 引擎获取数据记录的过程是先从索引文件中拿到数据区的地址,然后再去数据文件中获取对应地址的数据返回给客户端。

2、Innodb 存储引擎中的实现


.frm 表定义文件:每一个存储引擎都有这个文件

.ibd 数据文件:数据库表中的数据保存在这个文件

在 InnoDB 存储引擎里,它是以主键为索引来组织数据的存储的,所以索引文件和数据文件是同一个文件,都在 .ibd 文件里面。

Innodb 以主键为索引来组织数据的存储,如果没有指定主键,那么 InnoDB 会默认增加主键索引,同时,叶子节点存放的是整张表的行记录数据,因为主键对应的行所有的字段都在叶子节点上存在,而且索引键值的逻辑顺序跟数据库表中的数据行内容存储顺序是一致,所以这种主键索引也叫聚集索引

Innodb 的辅助索引与聚集索引的区别在于辅助索引的叶子节点并不包含行记录的全部数据,而是存储相应行数据的聚集索引键聚集索引键(即主键的值),当通过辅助索引来查询数据时,InnoDB 存储引擎会遍历辅助索引找到主键,然后再通过主键在聚集索引中找到完整的行记录数据。

InnoDB 会默认增加主键索引的规则

1、如果定义了主键(PRIMARY KEY),那么 InnoDB 会选择主键作为聚集索引;

2、如果没有定义主键,那么 InnoDB 会选择第一个不包含有 NULL 值的唯一索引作为主键索引;

3、如果唯一索引也没有定义,那么 InnoDB 会选择内置 6 个字节的 ROWID 作为默认的聚集索引,采用主键递增的策略生成。

Innodb 引擎的聚集索引把行记录数据与主键全部存起来的原因是考虑到用主键做查询的情况比较多,所以把所有的行记录聚集起来放到主键的叶子节点上。

Innodb 引擎的辅助索引用主键值而不用地址表示,主要原因是当数据变化的时候,如果用的是主键,不是地址的话,不用再维护辅助索引了。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
存储 缓存 数据库
解决缓存与数据库的数据一致性问题的终极指南
解决缓存与数据库的数据一致性问题的终极指南
245 63
|
5月前
|
消息中间件 canal 缓存
项目实战:一步步实现高效缓存与数据库的数据一致性方案
Hello,大家好!我是热爱分享技术的小米。今天探讨在个人项目中如何保证数据一致性,尤其是在缓存与数据库同步时面临的挑战。文中介绍了常见的CacheAside模式,以及结合消息队列和请求串行化的方法,确保数据一致性。通过不同方案的分析,希望能给大家带来启发。如果你对这些技术感兴趣,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
311 6
项目实战:一步步实现高效缓存与数据库的数据一致性方案
|
5月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
1月前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
|
1月前
|
缓存 NoSQL 关系型数据库
云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应
本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。
|
2月前
|
缓存 NoSQL Serverless
云数据库Tair:从稳定低延时缓存到 Serverless KV
本次分享聚焦云数据库Tair的使用,涵盖三部分内容:1) Tair概览,介绍其作为稳定低延时缓存及KV数据库服务的特点和优势;2) 稳定低延迟缓存技术,探讨如何通过多线程处理、优化内核等手段提升性能与稳定性;3) 从缓存到Serverless KV的演进,特别是在AI大模型时代,Tair如何助力在线服务和推理缓存加速。Tair在兼容性、性能优化、扩缩容及AI推理加速方面表现出色,满足不同场景需求。
|
2月前
|
缓存 物联网 数据库
InfluxDB vs TDengine :2025 年了,谁家用的数据库还不能高效读缓存?
在工业互联网和物联网的大数据应用场景中,实时数据的写入和查询性能至关重要。如何快速获取最新设备状态并实时处理数据,直接影响到业务的高效运转。本文将深入分析 TDengine 和 InfluxDB 在缓存机制上的差异,帮助读者更好地理解这两款主流时序数据库在性能优化方面的优劣。
184 1
|
3月前
|
SQL 缓存 关系型数据库
美团面试:Mysql 有几级缓存? 每一级缓存,具体是什么?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴因未能系统梳理MySQL缓存机制而在美团面试中失利。为此,尼恩对MySQL的缓存机制进行了系统化梳理,包括一级缓存(InnoDB缓存)和二级缓存(查询缓存)。同时,他还将这些知识点整理进《尼恩Java面试宝典PDF》V175版本,帮助大家提升技术水平,顺利通过面试。更多技术资料请关注公号【技术自由圈】。
美团面试:Mysql 有几级缓存? 每一级缓存,具体是什么?
|
3月前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
|
3月前
|
缓存 NoSQL 关系型数据库
mysql和缓存一致性问题
本文介绍了五种常见的MySQL与Redis数据同步方法:1. 双写一致性,2. 延迟双删策略,3. 订阅发布模式(使用消息队列),4. 基于事件的缓存更新,5. 缓存预热。每种方法的实现步骤、优缺点均有详细说明。
202 3

热门文章

最新文章