
MySQL
文章平均质量分 95
武子康
Hi, I'm Zikang / 武子康
好奇心驱动的探索者 | INTJ / INFJ
我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。
坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java-98 深入浅出 MySQL 深入理解数据库事务与锁机制:ACID特性全解析
必须满足ACID特性:原子性、一致性、隔离性、持久性。原子性确保事务中的操作要么全部成功,要么全部回滚,通过Redo/Undo日志和WAL技术实现;一致性保证事务前后数据库状态符合完整性约束,依赖外键、唯一索引及日志机制维护;隔离性确保并发事务互不干扰,常用隔离级别有读未提交、读已提交、可重复读、串行化,分别平衡性能与一致性需求;持久性保证已提交事务的修改永久保存,即使系统故障也能通过Redo日志恢复。InnoDB等存储引擎通过Buffer Pool、日志文件、检查点机制实现上述特性。原创 2025-08-14 09:09:12 · 544 阅读 · 0 评论 -
Java-97 深入浅出 MySQL慢查询定位与优化攻略
通过log_queries_not_using_indexes记录未使用索引的查询,辅助发现潜在性能问题。慢查询日志记录执行时间、锁等待、扫描行数等关键信息,便于DBA分析瓶颈。分析方法包括使用文本编辑器直接查看日志,或借助mysqldumpslow等工具进行统计。判断是否使用索引可通过EXPLAIN查看执行计划,重点关注key、type、rows等字段,但使用索引不一定代表性能提升,还需结合过滤性与扫描行数评估。常见优化方案包括:精确选择查询列、合理建索引(优先高选择性列)、避免函数和隐式类型转换原创 2025-08-13 10:51:46 · 703 阅读 · 0 评论 -
Java-96 深入浅出 MySQL 索引与排序机制详解与优化实践 Filesort
利用索引排序(Index Order By)和文件排序(Filesort)。索引排序依赖索引的有序特性,性能优越,适用于 ORDER BY 列顺序与索引定义完全一致、方向相同且遵循最左前缀原则的场景;Filesort 则在无法直接利用索引时执行额外的排序操作,包括双路排序(先取排序键再回表)和单路排序(一次性取全列排序)。双路排序内存占用低,但需二次磁盘读取;单路排序减少磁盘访问,但可能因超出 sort_buffer_size 而产生临时文件。优化策略包括:设计与查询匹配的索引、使用覆盖索引。原创 2025-08-12 08:47:49 · 977 阅读 · 0 评论 -
Java-95 深入浅出 MySQL 回表查询与索引优化 覆盖索引、最左前缀原则、LIKE 查询与 NULL 值处理
深入解析了 MySQL InnoDB 存储引擎中的回表查询机制及相关优化策略。回表查询指在使用辅助索引检索数据时,通过索引找到主键值后,再回到聚簇索引获取完整行数据的过程。这种方式会增加额外 I/O 开销,在查询数据量大时影响性能。文中介绍了覆盖索引的原理与优势,指出通过建立包含所需查询列的复合索引可有效避免回表,提高查询速度。同时,详细阐述了最左前缀原则及其对索引利用的影响,提醒在设计复合索引时应遵循列顺序优化查询性能。此外,文章还分析了 LIKE 模糊查询与索引匹配规则、NULL 值对索引的影响。原创 2025-08-11 09:02:33 · 637 阅读 · 0 评论 -
Java-94 深入浅出 MySQL EXPLAIN详解:索引分析与查询优化详解
EXPLAIN 命令在索引分析与查询优化中的作用。EXPLAIN 可输出 SELECT 语句的执行计划,帮助判断查询类型(select_type)、访问方式(type)、可能使用的索引(possible_keys)、实际使用的索引(key)、扫描行数(rows)、索引长度(key_len)及额外信息(Extra)。其中 type 值反映访问效率,从 ALL 全表扫描到 NULL(无需访问表)依次提升;possible_keys 显示潜在可用索引,key 则为实际使用索引;key_len 可判断复合索引的使用原创 2025-08-08 08:48:24 · 891 阅读 · 0 评论 -
Java-93 深入浅出 MySQL 聚簇索引 vs 辅助索引:结构、原理与性能全解析
MySQL 中的聚簇索引是一种将数据行存储在 B+Tree 叶子节点中的索引结构,数据按主键顺序物理存储,InnoDB 引擎强制每张表必须有一个聚簇索引。若未定义主键,系统会选用第一个非空唯一索引或创建隐藏 rowid。辅助索引(非聚簇索引)则仅存储索引字段及主键值,查询时需“回表”查找完整数据。聚簇索引适用于主键查找、范围查询等场景,性能高但不宜使用UUID、长字符串作主键。合理利用辅助索引并结合覆盖索引可优化查询效率。主键越小越利于整体性能。原创 2025-08-07 08:58:12 · 1169 阅读 · 0 评论 -
Java-92 深入浅出 MySQL 索引原理与优化详解:B+Tree、Hash、二分查找全解析
索引是数据库中用于加速查询的一种特殊数据结构,会占用额外存储并增加维护开销。MySQL 常用 B+Tree 索引,数据存储于 16KB 数据页并按有序方式组织,支持高效的等值、范围、排序及连接查询。B+Tree 的非叶子节点仅存储键值,叶子节点存储完整数据并通过双向链表相连,极大优化了范围扫描性能。二分查找在有序数据中可快速定位目标,时间复杂度 O(log n),但更新成本高。Hash 索引适用于等值查询,范围查询需全表扫描;InnoDB 提供自适应哈希索引,对热点数据自动建立哈希映射。原创 2025-08-06 08:55:13 · 1104 阅读 · 0 评论 -
Java-91 深入浅出 MySQL索引类型与实战详解:原理、分类、应用与优化
索引是数据库中加速数据检索的重要结构,可显著提升查询与排序性能。按存储结构分,有B+Tree索引(支持范围查询、默认类型)、Hash索引(等值查询高效)、FULLTEXT索引(全文搜索)、RTree索引(空间数据查询)。按应用层分,有普通索引(最基础,无唯一性要求)、唯一索引(值必须唯一,可为NULL)、主键索引(唯一且非空,仅一列或组合一组)、复合索引(多列组合,遵循最左前缀原则)。按存储方式分,有聚簇索引(叶节点存行数据,如InnoDB主键)与非聚簇索引(叶节点存主键值,需回表查询)。原创 2025-08-05 08:46:59 · 834 阅读 · 0 评论 -
Java-90 深入浅出 MySQL Binlog 全解析:记录模式、主从复制与数据恢复详解
MySQL Binlog(二进制日志)用于记录所有数据库结构变更(DDL)及数据修改(DML),不包含只读操作。它以事件形式保存,支持三种记录模式:ROW(记录行变化,数据一致性高)、STATEMENT(记录SQL语句,节省空间)、MIXED(混合模式,兼顾两者)。Binlog 是主从复制的核心基础,主库将事件传输给从库重放,实现读写分离、负载均衡及灾备;同时支持数据恢复,可配合 mysqlbinlog 工具按时间或位置点精确回放,实现增量恢复。其文件由多种 Log Event 组成原创 2025-08-04 09:19:12 · 1006 阅读 · 0 评论 -
Java-89 深入浅出 MySQL 搞懂 MySQL Undo/Redo Log,彻底掌握事务回滚与持久化
Undo Log(回滚日志)与 Redo Log(重做日志)是 MySQL InnoDB 实现事务的核心机制。Undo Log 用于记录数据修改前的旧值,支持事务回滚与 MVCC(多版本并发控制),保证事务的原子性。事务执行前将原值写入 Undo Log,回滚时按 LIFO 恢复数据,并支持快照读。长事务会导致 Undo 堆积,占用空间。Redo Log 用于记录已提交事务的物理变更,确保事务的持久性。修改先写入 Redo Buffer,再根据 innodb_flush_log_at_trx_commit。原创 2025-08-02 09:09:20 · 957 阅读 · 0 评论 -
Java-88 深入浅出 MySQL InnoDB 存储结构全解析:表空间、段、区、页与行格式
InnoDB 数据文件采用层级化结构管理,从表空间(Tablespace)到段(Segment)、区(Extent)、页(Page)再到行(Row),逐级组织存储以兼顾性能与管理便利性。表空间可为独立表或系统共享空间,段则按用途分为数据段、索引段与回滚段;区为1MB固定大小,用于批量分配减少碎片;页为16KB,是最小管理单元,存储数据、索引或元信息;行记录包含事务ID、回滚指针、字段指针及数据内容。InnoDB 支持 Antelope(REDUNDANT、COMPACT)与 Barracuda原创 2025-08-01 09:17:02 · 802 阅读 · 0 评论 -
Java-87 深入浅出 MySQL 从架构到线程:剖析存储引擎、线程模模型
5.7 实现 Undo 表空间与临时表空间的独立化,支持在线动态调整 Buffer Pool,提高资源调配灵活性。8.0 进一步解耦 InnoDB 表空间结构,增强临时表和 Doublewrite Buffer 管理,支持更灵活的多表空间配置,优化大数据量操作性能。在线程模型方面,InnoDB 使用 IO Thread 并发处理读写、日志、插入缓冲操作;Purge Thread 负责清理 undo 日志,Page Cleaner Thread 定期刷新脏页,Master Thread 则协调所有后台任务。原创 2025-07-31 08:48:10 · 1371 阅读 · 0 评论 -
Java-86 深入浅出 MySQL InnoDB磁盘结构全解析:表空间、日志系统与数据字典详解
InnoDB 是 MySQL 默认的事务型存储引擎,其磁盘结构是保障 ACID 特性的核心,主要包括表空间、数据字典、双写缓冲区、重做日志和撤销日志。表空间分为系统、独立、通用、Undo 和临时类型,各自承担不同存储任务。数据字典用于记录表结构、索引等元数据,存于系统表空间。双写缓冲区可防止部分页写入,提升崩溃恢复能力。Redo Log 记录物理变更,用于故障恢复;Undo Log 记录事务前镜像,支持回滚和 MVCC。从 MySQL 5.7 起,Undo 日志支持独立表空间,提升性能和可管理性。原创 2025-07-30 09:41:52 · 962 阅读 · 0 评论 -
Java-85 深入浅出 MySQL InnoDB 存储结构:Buffer Pool、写缓冲与日志机制全解
InnoDB 是 MySQL 默认存储引擎,自 5.5 版本起广泛应用于事务型系统。其架构分为内存结构和磁盘结构两大部分。内存结构包括核心组件 Buffer Pool(缓冲池)、Change Buffer(写缓冲)、Adaptive Hash Index(自适应哈希索引)和 Log Buffer(日志缓冲区)。其中,Buffer Pool 是性能关键,采用改进的 LRU 算法管理页数据,提升缓存命中率;Change Buffer 用于延迟非唯一索引页的磁盘写入;日志缓冲区支持 Redo 和 Undo 。原创 2025-07-29 08:57:35 · 1242 阅读 · 0 评论 -
Java-84 深入浅出 MySQL 存储引擎全解析:InnoDB vs MyISAM 深度对比
MySQL 的存储引擎决定了数据的存储方式与访问机制,位于其体系结构核心。常见引擎如 InnoDB 支持事务、行级锁和崩溃恢复,是默认选择,适用于高并发、强一致性场景;MyISAM 不支持事务,采用表级锁,读性能优秀,适合读密集型应用;Memory、Archive、CSV 等则面向临时缓存、日志归档或数据交换。InnoDB 与 MyISAM 在事务、锁机制、索引结构、并发控制等方面差异显著。选择合适的引擎应结合业务需求、并发特性及数据一致性要求综合评估。原创 2025-07-28 09:07:01 · 750 阅读 · 0 评论 -
Java-83 深入浅出 MySQL 连接、线程、查询缓存与优化器详解
MySQL 的连接机制与查询执行流程。MySQL 使用连接器与线程模型,采用“半双工”通信协议,每个连接对应独立线程,线程状态可通过 SHOW PROCESSLIST 监控。连接池配置和管理对高并发性能尤为关键。查询缓存机制在命中相同SQL时可直接返回结果,提升效率,但对数据变动敏感,频繁写入会使缓存失效,命中率低于20%建议关闭。查询优化器分为静态和动态两类,涉及常量折叠、索引条件下推、LIMIT提前终止等优化策略。MySQL 8.0 起已移除查询缓存,建议结合具体场景使用外部缓存。原创 2025-07-26 09:38:48 · 955 阅读 · 0 评论 -
Java-82 深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖
网络连接层负责客户端连接管理,支持多种协议和连接器(如JDBC、Python、C等),并提供连接池、SSL等功能;服务层是核心处理模块,包含连接池、SQL接口、解析器、查询优化器与缓存系统,负责SQL语句解析与执行;存储引擎层采用插件化设计,支持InnoDB、MyISAM、Memory等多种引擎,实现数据存储、事务控制和索引管理;系统文件层管理所有物理文件,如日志、配置、表结构和数据文件,确保数据持久性与系统稳定运行。这一分层架构实现了MySQL的灵活性、可扩展性与高性能表现,适应不同场景下的数据库需求。原创 2025-07-25 09:41:35 · 848 阅读 · 0 评论 -
Java-81 深入浅出 MySQL发展全景:从单机架构到云数据库演进实录
MySQL自1995年发布1.0版本以来,历经数次架构演进与功能升级,2010年被Oracle收购后,促使社区分裂并诞生多个分支。Oracle主推三大产品线:商业版Enterprise Edition、开源社区版、云服务HeatWave。社区中,Percona Server强调性能与可维护性,适合高并发场景;MariaDB则由MySQL创始人主导,注重开放与兼容性,已被多个Linux发行版采纳。架构层面,从单机单库发展到主从架构和分库分表,逐步解决性能瓶颈与可用性问题。原创 2025-07-24 10:41:35 · 908 阅读 · 0 评论