
数据库
文章平均质量分 95
程序员徐述
公号:程序员徐述
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MySQL 灵魂拷问:你的数据页藏着多少「反常识」?
16KB 固定页大小:减少磁盘 IO 次数(一次 IO 读 16KB 比读 1KB 更高效);延迟空间回收:避免频繁整理磁盘碎片,用空间换时间;复杂索引结构:通过页目录、预读机制等,让查询更快找到数据。查得慢?看看是否触发了回表或索引失效;空间大?试试OPTIMIZE TABLE重建表释放碎片;记录存得少?算算数据页的空间公摊是否合理。最后,我最近弄了一个Java技术交流群,讨论面试、后端等领域知识,如果你感兴趣,欢迎关注我公众号回复【1】,我拉你入群哈~(我的公众号:程序员徐述)。原创 2025-06-18 09:00:00 · 683 阅读 · 0 评论 -
删除大量数据后,数据库文件为何纹丝不动?MySQL 存储机制大揭秘
本质原因DELETE是逻辑删除,空间释放需依赖重建表或分区操作。核心认知:MySQL优先保证事务安全和性能,而非实时回收空间。面试要点:需清晰区分“标记删除”与“物理删除”,并能结合业务场景选择合适的空间释放方案。通过理解InnoDB存储机制,合理运用定期监控碎片率、分区表,可有效避免删除数据后表文件“虚胖”问题,提升数据库存储效率。“数据库优化的本质,是理解机器的‘语言’—— 它不像人类会断舍离,需要你主动帮它做‘断舍离’。原创 2025-06-09 09:00:00 · 601 阅读 · 0 评论 -
一条 INSERT 背后的秘密:揭开 InnoDB 记录结构的神秘面纱。
数据库的 “高性能密码” 藏在底层结构里。从 INSERT 语句到磁盘存储,COMPACT 行格式的字段管理、行溢出的优化逻辑,都是提升数据库能力的关键。懂记录结构,才能在面试中从容应答,在优化时直击痛点。记住:深挖底层原理,才能让技术成长 “知其所以然”。欢迎留言交流,一起解锁更多数据库奥秘!最后,我最近弄了一个Java技术交流群,讨论面试、后端等领域知识,如果你感兴趣,欢迎关注我公众号回复【1】,我拉你入群哈~(我的公众号:程序员徐述)。目前已经有 100 人加入。如果你已经在群里,请忽略~原创 2025-06-03 09:00:00 · 1016 阅读 · 0 评论 -
从面试官视角,彻底搞懂MySQL事务隔离级别与MVCC
我:隔离性听起来简单:别人操作数据库的时候我别看到就行了。但真要实现“互不干扰”,成本非常高。所以数据库给了我们四个等级的隔离级别,让我们按需选择隔离级别脏读不可重复读幻读读未提交(RU)√√√读已提交(RC)×√√可重复读(RR)××√串行化(SERIAL)×××面试官:你说说,什么是脏读、不可重复读和幻读?我:假设银行有个账户A,余额是100元。脏读(Dirty Read):读到了别人还没提交的数据。原创 2025-05-19 09:00:00 · 1115 阅读 · 0 评论 -
别让数据库成为你的软肋,MySQL事务原理全面解析
- 转账操作(两个原子操作)-- 扣款-- 加款它确保这些操作要么全部成功,要么全部失败,不会出现一半成功一半失败的情况。这就是事务的基本特性,也是解决上述问题的关键。那么,MySQL是如何实现这种机制,并在保证数据安全的同时兼顾性能的?下文将一一解答。Undo Log:记录数据修改前的值,用于事务回滚和MVCCRedo Log:记录数据修改后的值,确保数据持久性这两种日志协同工作,保证了事务的原子性和持久性。原子性:由Undo Log实现,记录修改前数据,支持回滚操作一致性。原创 2025-04-18 09:00:00 · 734 阅读 · 0 评论 -
线上突发:MySQL 自增 ID 用完,怎么办?
自增 ID 用尽确实是个让人头疼的问题,但其实并不可怕。只要我们提前做好准备,问题就能轻松解决。提前搭建监控和预警机制:定期检查自增ID的使用情况,避免等到 ID 用完了才慌忙应对。一旦发现接近上限,及时采取措施,就能有效避免线上故障。系统设计时多考虑细节:设计数据库时多考虑未来的扩展性。如果业务增长迅速,早期就可以用 BIGINT 替代 INT,或者直接考虑分布式 ID 生成方案。这样一来,未来的数据增长就不会成为问题。总之,技术问题并不可怕,真正可怕的是没有提前规划和准备。原创 2025-01-22 21:19:53 · 792 阅读 · 0 评论 -
深入分析 MySQL 索引原理
深入分析 MySQL 索引原理索引结构B+ 树B+ 树索引结构索引维护InnoDB 的索引模型索引组织表回表覆盖索引联合索引最左前缀原则如何安排索引内的字段顺序索引下推总结谈到 MySQL 索引,服务端的同学应该是再熟悉不过,很多人会通过索引联想到字典中的目录,这样的类比是很形象的。但是如果再往深处说,恐怕很多小伙伴就有点张口结舌了。比如 MySQL 索引都有哪些类型呢?索引结构是什么样的呢?有了索引是如何检索数据的呢?本文就围绕这些问题来探讨一下MySQL 索引的实现原理。本文篇幅稍微有点长,希原创 2022-04-06 22:13:26 · 1272 阅读 · 0 评论 -
面试官:MySQL 为什么用 B+ 树实现索引
MySQL 为什么用 B+ 树实现索引索引概述常见的索引模型哈希表有序数组二叉查找树二叉查找树的查找操作二叉查找树的缺陷为什么索引不用二叉树实现InnoDB 的索引模型B 树B 树存在的问题B+ 树B 树 和 B+ 树 的区别总结索引对大家来说肯定不会陌生,不管是日常的开发还是面试中,都少不了索引的身影。我们都会使用索引,但是我们对于索引的原理却是一知半解。本文就带大家深入学习一下 MySQL 的索引模型。索引概述关于索引的定义,百度百科给出的解释是:在关系数据库中,索引是一种单独的、物理的对数原创 2022-03-19 16:10:07 · 5256 阅读 · 5 评论 -
一文读懂 MySQL 事务隔离机制
MySQL 事务隔离机制隔离性与隔离级别四个案例看懂 MySQL 事务隔离级别查看隔离级别READ_UNCOMMITTED脏读不可重复读幻读READ_COMMITTEDREPEATABLE_READSERIALIZABLE事务隔离的实现总结提到事务,大家肯定不陌生。最经典的例子就是银行转账。比如,A 账户给 B 账户转账 100。在这种交易的过程中,有几个问题值得思考:如何同时保证上述交易中,A 账户总金额减少 100,B账户总金额增加 100?A 账户如果同时在和 C 账户交易(T2),如何让这原创 2022-03-12 14:58:07 · 1505 阅读 · 0 评论 -
通过一条更新语句的执行,深入理解 InnoDB 的底层架构
通过一条更新语句的执行,深入理解 InnoDB 的底层架构InnoDBInnoDB 重要的内存结构Buffer PoolRedo LogRedo Log 的基本概念Redo LogUndo Log更新语句的执行流程Change BufferBinlogBinlog 日志格式MySQL 为什么会有两份日志binlog 和 redo log 的区别执行器和 InnoDB 引擎执行 update 语句时的内部流程两阶段提交总结前面通过 一条查询SQL的执行过程 我们知道了 MySQL 的整体架构。对一条查询 S原创 2022-02-27 21:39:48 · 1139 阅读 · 0 评论 -
面试官:说说一条查询SQL的执行过程
一条查询语句是如何执行的?MySQL 的架构分层MySQL组件定义连接器长链接的问题查询缓存分析器词法分析语法分析优化器执行器总结本文和大家一起讨论查询语句在 MySQL 中的执行过程。为了理解这个问题,我们先从 MySQL 的架构说起,对于 MySQL 来说,虽然经历了多个版本迭代,但每次的迭代,都是基于 MySQL 基架的。下面我们开始分析下 MySQL 的架构体系。MySQL 的架构分层MySQL 大致可以分为 3 层架构,如下图:第一层客户端,主要负责与 MySQL Server 层建原创 2022-02-19 21:48:31 · 4086 阅读 · 0 评论 -
[数据库](三)分布式事务
深入理解分布式事务 待整理转载 2020-04-20 10:35:18 · 195 阅读 · 0 评论 -
[数据库](二)Spring事务机制
数据库事务1、什么是事务1.1、wiki百科1.2、通俗的解释1、什么是事务1.1、wiki百科数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。概要:数据库事务通常包含了一个序列的对数据库的读/写操作。包含有以下两个目的:1、为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方...原创 2020-04-19 16:54:20 · 232 阅读 · 0 评论 -
[数据库](一)数据库事务
数据库事务1、什么是事务?1.1 wiki百科1.2 通俗解释1、什么是事务?1.1 wiki百科数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。概要数据库事务通常包含了一个序列的对数据库的读/写操作。包含有以下两个目的:1、为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方...转载 2020-04-19 22:03:58 · 498 阅读 · 0 评论