MySQL数据库缓存query_cache 19

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 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 引擎的辅助索引用主键值而不用地址表示,主要原因是当数据变化的时候,如果用的是主键,不是地址的话,不用再维护辅助索引了。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
6月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
2月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
541 5
|
存储 缓存 数据库
解决缓存与数据库的数据一致性问题的终极指南
解决缓存与数据库的数据一致性问题的终极指南
699 63
|
消息中间件 canal 缓存
项目实战:一步步实现高效缓存与数据库的数据一致性方案
Hello,大家好!我是热爱分享技术的小米。今天探讨在个人项目中如何保证数据一致性,尤其是在缓存与数据库同步时面临的挑战。文中介绍了常见的CacheAside模式,以及结合消息队列和请求串行化的方法,确保数据一致性。通过不同方案的分析,希望能给大家带来启发。如果你对这些技术感兴趣,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
600 6
项目实战:一步步实现高效缓存与数据库的数据一致性方案
|
8月前
|
缓存 NoSQL 关系型数据库
WordPress数据库查询缓存插件
这款插件通过将MySQL查询结果缓存至文件、Redis或Memcached,加速页面加载。它专为未登录用户优化,支持跨页面缓存,不影响其他功能,且可与其他缓存插件兼容。相比传统页面缓存,它仅缓存数据库查询结果,保留动态功能如阅读量更新。提供三种缓存方式选择,有效提升网站性能。
169 1
|
8月前
|
消息中间件 缓存 NoSQL
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
|
10月前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
300 1
|
10月前
|
缓存 NoSQL 关系型数据库
云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应
本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。
228 1
|
11月前
|
缓存 NoSQL Serverless
云数据库Tair:从稳定低延时缓存到 Serverless KV
本次分享聚焦云数据库Tair的使用,涵盖三部分内容:1) Tair概览,介绍其作为稳定低延时缓存及KV数据库服务的特点和优势;2) 稳定低延迟缓存技术,探讨如何通过多线程处理、优化内核等手段提升性能与稳定性;3) 从缓存到Serverless KV的演进,特别是在AI大模型时代,Tair如何助力在线服务和推理缓存加速。Tair在兼容性、性能优化、扩缩容及AI推理加速方面表现出色,满足不同场景需求。
|
SQL 缓存 关系型数据库
美团面试:Mysql 有几级缓存? 每一级缓存,具体是什么?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴因未能系统梳理MySQL缓存机制而在美团面试中失利。为此,尼恩对MySQL的缓存机制进行了系统化梳理,包括一级缓存(InnoDB缓存)和二级缓存(查询缓存)。同时,他还将这些知识点整理进《尼恩Java面试宝典PDF》V175版本,帮助大家提升技术水平,顺利通过面试。更多技术资料请关注公号【技术自由圈】。
美团面试:Mysql 有几级缓存? 每一级缓存,具体是什么?

热门文章

最新文章

推荐镜像

更多