
MySql
文章平均质量分 85
看完这个专栏,没人比你懂Mysql
dj_master
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
在 MySQL 的 InnoDB 存储引擎中的 Doublewrite Buffer
比如,正在向磁盘写入一个 16KB 的页,此时突然发生断电、磁盘故障等意外,导致只写入了部分数据(比如 8KB ),那么这个页就会变成 “半写页” ,页的结构被破坏。一旦出现部分写失败,后续数据库启动或访问该页时,会发现页的校验不通过,无法正常识别和使用,进而可能导致数据丢失、损坏,影响数据库的一致性和可用性。综上所述,Doublewrite Buffer 是 InnoDB 为应对磁盘写入可能出现的部分写失败问题而设计的关键组件,通过双写的机制,有效防止数据页损坏,保障数据库的数据完整性和可靠性。原创 2025-06-20 11:39:02 · 289 阅读 · 0 评论 -
在 MySQL 里,DATETIME 和 TIMESTAMP
特性DATETIMETIMESTAMP存储范围极广(1000-01-01到9999-12-31有限(1970-01-01UTC 到2038-01-19UTC )时区处理与时区无关,原样存储与 UTC 关联,插入/查询时自动时区转换存储空间5 字节(5.6.4+ ,无小数秒 )4 字节(无小数秒 )默认值行为需手动设置默认值,否则为NULL未赋值时默认填当前时间戳自动更新需手动开启(ON UPDATE支持自动初始化和更新(常用作修改时间字段 )典型场景。原创 2025-06-20 14:19:37 · 975 阅读 · 0 评论 -
分享一些实际的案例或最佳实践,展示如何优化多表JOIN的查询性能?
索引优先:为JOIN条件、WHERE过滤字段建索引,优先用联合索引覆盖多条件。小表驱动大表:让数据量小的表作为驱动表(如子查询过滤后的数据 ),减少大表扫描次数。拆分复杂JOIN:用临时表、子查询分阶段关联,降低单次JOIN复杂度。避免数据库“一刀切”:高并发场景下,用应用层拆分查询 + 聚合替代数据库JOIN,结合缓存提升性能。持续诊断:用EXPLAIN分析执行计划,关注type(访问类型 )、rows(扫描行数 )、等异常。原创 2025-06-20 14:13:06 · 301 阅读 · 0 评论 -
MySQL 主从同步延迟
实际处理主从同步延迟时,通常需要综合排查多个方面,逐步测试优化,找到最适合自身业务场景和数据库环境的解决方法 ,并且要持续监控主从同步状态,建立预警机制(如设置延迟阈值,超过后触发邮件、短信告警 ),及时发现和处理潜在的同步延迟问题。原创 2025-06-20 11:26:35 · 321 阅读 · 0 评论 -
在 SQL 中,SELECT、FROM、JOIN、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT 这些关键字
在 SQL 中,SELECTFROMJOINWHEREGROUP BYHAVINGORDER BYLIMIT。原创 2025-06-20 14:20:57 · 987 阅读 · 0 评论 -
在 MySQL 里,并非绝对不能用多表 JOIN
MySQL 不推荐多表JOIN,核心是它容易引发性能不可控、复杂度高、适配分布式困难等问题。实际开发中,要结合业务场景权衡:简单场景可谨慎用,复杂场景优先拆分为单表查询 + 应用层处理,或用缓存、预计算等方案替代,平衡性能、可维护性与架构扩展性。原创 2025-06-20 14:11:28 · 241 阅读 · 0 评论 -
详细的分库分表实施流程
整个分库分表实施流程需团队协作,涉及开发、测试、运维等多角色,且要充分考虑业务影响和数据安全,每个环节都需严谨执行,才能顺利完成分库分表改造,支撑业务持续发展。原创 2025-06-20 11:33:58 · 444 阅读 · 0 评论 -
对数据库进行分库分表,引入的一系列复杂问题
总之,分库分表是把“双刃剑”,在解决大数据量、高并发问题的同时,会带来诸多新问题,实施前需充分评估业务需求、技术能力和运维成本,做好应对方案,才能让分库分表真正发挥作用,支撑业务稳定发展。原创 2025-06-20 11:35:55 · 357 阅读 · 0 评论 -
从 MySQL 获取数据时,一定直接从磁盘读取吗?
从 MySQL 获取数据时,(缓冲池 )在其中起到了关键的缓存作用,下面详细拆解数据读取的流程和。原创 2025-06-20 11:37:45 · 225 阅读 · 0 评论 -
在 MySQL 里 DELETE、DROP、TRUNCATE 都用于 “删除” 操作
特性DELETETRUNCATEDROP操作类型DML(数据操作语言 )DDL(数据定义语言 )DDL(数据定义语言 )作用范围表中数据(可部分/全部删 )表中所有数据整个表(结构 + 数据 + 关联 )事务回滚支持(需在事务中执行 )不支持(自动提交 )不支持(自动提交 )执行效率低(逐行处理 )高(截断/重建表 )最高(删元数据 + 物理文件 )触发器触发是(DELETE触发器 )否否(表已删除 )自增字段重置不重置重置(回到初始值 )原创 2025-06-20 14:18:13 · 463 阅读 · 0 评论 -
MySQL 的 InnoDB 存储引擎的 Log Buffer
Log Buffer 是 InnoDB 提升写入性能的“秘密武器”,通过内存暂存 Redo Log,减少磁盘 I/O,同时依托 WAL 机制保障事务持久性。理解它的工作流程和配置,能帮你在“性能”和“数据安全”间找到平衡,优化 MySQL 数据库的写入效率与可靠性。原创 2025-06-20 14:09:31 · 404 阅读 · 0 评论 -
用生活中的例子解释下Buffer Pool的工作机制
作用:缓存常用数据(食材),加速读写,减少磁盘(冰箱)IO。流程:读数据先看缓存,没有就加载;写数据先改缓存(标记脏页),延迟刷盘;空间不足时淘汰旧数据(优先脏页刷盘)。这样类比后,Buffer Pool 的工作机制是不是瞬间就懂了?本质就是用“内存的高速”弥补“磁盘的低速”,让数据库跑得更快~原创 2025-06-20 11:14:52 · 362 阅读 · 0 评论 -
详细拆解 Buffer Pool 的工作机制 和 刷脏的具体过程
Buffer Pool 工作机制:通过缓存磁盘数据页,减少磁盘 IO;修改时先写 redo log,再改内存页(产生脏页 );空间不足时用 LRU 淘汰旧页(脏页需先刷脏 )。刷脏过程:后台线程异步选择脏页,校验 redo log 后写入磁盘,标记为干净页,保证数据持久化和内存可用。理解这两个机制,就能掌握 InnoDB 性能优化的核心——尽可能让热点数据留在 Buffer Pool,减少磁盘 IO;合理控制刷脏频率,平衡性能和数据安全。原创 2025-06-20 11:15:08 · 892 阅读 · 0 评论 -
详细介绍 Write - Ahead Logging(WAL)技术
不过要注意,MySQL 里的二进制日志(binlog )和 redo log 功能不同,binlog 主要用于复制(主从同步 )和恢复(基于binlog的点-in-time恢复 )等场景,虽然它和 redo log 协同工作保障 MySQL 数据一致性(如二阶段提交 ),但 redo log 才是 InnoDB 实现 WAL 的关键组件。比如你要更新数据库里某条记录的姓名,WAL 会先把“要把某条记录的姓名从 A 改成 B”这个操作详细记录到日志里,之后再去实际修改数据文件中对应记录的姓名字段。原创 2025-06-19 14:51:15 · 607 阅读 · 0 评论 -
在 MySQL 里,VARCHAR(100)、VARCHAR(10)、CHAR(100)、CHAR(10)区别
在 MySQL 里,VARCHAR和CHAR是常用的字符串存储类型,CHAR(100)CHAR(10)主要在。原创 2025-06-19 14:47:17 · 547 阅读 · 0 评论 -
MySQL 的 InnoDB 存储引擎,redo log(重做日志)记录了什么?
对于INSERT要修改的数据页的位置(表空间、页编号 )。行数据在页中的插入位置和具体内容。涉及的索引页(如二级索引 )的修改细节。这些记录的本质是“如何把数据页从当前状态改到新状态”的物理指令,目的是崩溃恢复时能重建数据页的正确状态,保证数据不丢失。理解这一点后,就能明白 redo log 为何是 InnoDB 实现 crash - safe 的核心——它存的是数据页的“修改蓝图”,而非 SQL 语句本身。原创 2025-06-19 14:53:42 · 548 阅读 · 0 评论 -
当定义了VARCHAR(50)时,实际存储数据的长度最大可以是多少?
在 MySQL 中, 里的 代表最大可存储的字符数量,但实际存储的最大长度还会受以下因素影响,详细说明如下:从 MySQL 4.1 及以后版本开始, 中的 指的是字符个数,而非字节数 。无论存储的是数字、字母、英文符号(占 1 字节 ),还是中文、特殊字符(如 下占 3 - 4 字节 ),最多都能存 个字符 。比如:虽然 是字符数限制,但实际存储还受 MySQL 行最大字节数(65535 字节 ) 以及 自身的长度标识字节(1 - 2 字节 ) 限制,不过对 来说,这些限制通常不会触发: 会原创 2025-06-19 14:49:22 · 374 阅读 · 0 评论 -
在 MySQL 里,TEXT 类型是用于存储大文本数据的字符串类型
在 MySQL 里,TEXT类型是用于存储大文本数据的字符串类型,不同TEXT。原创 2025-06-19 14:34:36 · 758 阅读 · 0 评论 -
在 MySQL 的日常使用和开发中,会用到丰富多样的函数来满足不同场景
这些函数覆盖了 MySQL 日常使用中数据处理、查询分析、业务逻辑实现等多方面的需求,合理运用它们能大幅提升 SQL 语句的功能和效率,满足多样化的业务场景。当然,MySQL 还有很多其他函数(如加密函数。等 ),可根据具体业务需求进一步探索使用。原创 2025-06-19 14:36:31 · 824 阅读 · 0 评论 -
对于存储长度不确定的数据,VARCHAR和CHAR类型该如何选择?
优先VARCHAR:只要数据长度不确定、波动大,或包含多字节字符,直接选VARCHAR,兼顾空间和灵活性。谨慎选CHAR:仅当数据长度虽不定,但实际接近固定,且对查询性能要求极高时,才考虑CHAR,否则优先VARCHAR。长度不确定选VARCHAR,接近固定且要性能选CHAR,结合业务场景灵活调整,就能在空间和性能间找到平衡~原创 2025-06-19 14:48:18 · 441 阅读 · 0 评论 -
详细梳理 redo log、undo log 的区别,以及 Buffer Pool 和刷脏 的概念
对于INSERT要修改的数据页的位置(表空间、页编号 )。行数据在页中的插入位置和具体内容。涉及的索引页(如二级索引 )的修改细节。这些记录的本质是“如何把数据页从当前状态改到新状态”的物理指令,目的是崩溃恢复时能重建数据页的正确状态,保证数据不丢失。理解这一点后,就能明白 redo log 为何是 InnoDB 实现 crash - safe 的核心——它存的是数据页的“修改蓝图”,而非 SQL 语句本身。原创 2025-06-19 14:56:51 · 749 阅读 · 0 评论 -
如何用 MySQL 的 EXPLAIN 语句进行查询分析
要详细且清晰地掌握如何使用 MySQL 的EXPLAIN。原创 2025-06-19 14:19:40 · 1054 阅读 · 0 评论 -
分库分表及其类型(策略)
当单数据库、单数据表的数据量过大,导致性能降低(如查询变慢、写入延迟等 ),或面临高并发访问压力时,分库分表技术应运而生。它通过特定规则,把原本集中的数据分散到多个数据库、多张数据表中,让单个库、表的数据量变小,以此提升数据库整体性能、并发处理能力,还能增强系统可用性与扩展性,常见于海量数据业务场景(像电商订单、社交平台用户信息等 )。原创 2025-06-19 14:09:31 · 712 阅读 · 0 评论 -
在 MySQL 里创建索引时,要关注多方面!
总之,MySQL 建索引要综合业务需求、数据特征、查询模式等,合理选类型、字段,控制数量,优化设计,同时做好维护监控,让索引真正成为性能优化利器,而非负担。原创 2025-06-19 14:11:35 · 567 阅读 · 0 评论 -
MySQL 中的数据排序主要依靠什么来实现
MySQL 的排序逻辑可归纳为“优先用索引有序性,否则走 Filesort”索引有序:直接遍历索引,利用索引的物理顺序返回结果(最快)。Filesort:无索引或索引无法覆盖时,在 Server 层用内存/临时文件排序(较慢,需优化)。理解这一逻辑后,优化排序的核心就是让查询尽可能命中索引的有序性,减少 Filesort 的触发。原创 2025-06-19 14:13:39 · 839 阅读 · 0 评论 -
MySQL 中 Change Buffer 是什么,有什么用?
Change Buffer 是 MySQL 中 InnoDB 存储引擎用于优化写操作(主要是插入、更新、删除,即 DML 操作 )性能的一种数据结构,它是缓冲池(Buffer Pool )的一部分。原创 2025-06-19 14:15:51 · 602 阅读 · 0 评论 -
MySQL 中的深度分页
深度分页的核心问题是offset 过大导致的无效扫描,优化思路是“用索引直接定位数据位置,避免扫描前 N 条”。优先选择索引定位法(主键/唯一索引 +),配合覆盖索引、业务标记等方案,可大幅提升深度分页性能。原创 2025-06-19 14:01:49 · 927 阅读 · 0 评论 -
MySQL 里count(*)、count(1) 和 count(字段名) 区别
在 MySQL 里,count(*)count(1)和count(字段名)原创 2025-06-19 14:07:17 · 469 阅读 · 0 评论 -
一条 SQL 语句在 MySQL 中的执行过程
一条 SQL 的执行,是“客户端请求 → Server 层解析与优化 → 存储引擎物理执行 → 结果返回”的完整流程。核心是查询优化器根据数据特征选最优执行计划,存储引擎高效读写数据,各组件协同保障 SQL 正确、高效执行。理解这一流程,是优化 SQL 性能(如索引设计、避免全表扫描 )的基础。原创 2025-06-18 11:07:25 · 237 阅读 · 0 评论 -
MySQL 的主从同步机制
MySQL 主从同步是“Binlog 复制 + 事务回放”的过程,核心依赖主库的 Binlog 记录变更、从库的 IO/SQL 线程复制和应用变更。通过选择合适的复制模式(如半同步 )、优化配置(如多线程复制 ),可在性能与数据安全间取得平衡,支撑高可用、高并发的业务场景。原创 2025-06-18 11:16:12 · 787 阅读 · 0 评论 -
MySQL长事务引发一系列性能与稳定性问题
长事务是 MySQL 性能与稳定性的“隐形杀手”,核心问题源于锁长期占用、Undo Log 膨胀、复制延迟、死锁风险的连锁反应。在高并发业务中,需通过监控、拆分事务、优化逻辑等手段,避免长事务引发的系统性问题。原创 2025-06-18 11:10:30 · 369 阅读 · 0 评论 -
给自己半天的时间,彻底搞清楚Mysql中的各种锁
全局锁是锁定整个MySQL数据库实例的锁,当全局锁被启用时,所有数据库中的表都会被锁定,其他事务无法执行写操作(如INSERT、UPDATE、DELETE),在读操作上可能根据锁的类型有所不同。全局锁是一把“双刃剑”,虽然能确保全库数据的一致性,但对业务的影响极大。在InnoDB环境下,应优先使用或物理备份工具替代全局锁;仅在非事务表或短时间维护场景中谨慎使用全局锁。数据库运维中,需始终遵循“最小化锁定范围、最短化锁定时间”的原则,平衡数据一致性与业务可用性。原创 2025-06-13 16:11:00 · 617 阅读 · 0 评论 -
Mysql连环问
第一问:MySQL索引有哪些类型?B-tree和Hash索引的区别是什么?MySQL 支持多种索引类型,不同存储引擎支持的索引类型也不同。最常用的是 InnoDB 存储引擎,它主要支持 B-Tree 索引(实际实现是 B+Tree),同时也利用了 Hash 索引 的概念进行内部优化(自适应哈希索引)。以下是 MySQL 中常见的索引类型及其支持的引擎:B-Tree 索引 (B+Tree 实现)Hash 索引Full-Text (全文) 索引Spatial (R-Tree) 索引T-Tree 索引 (NDB原创 2025-06-11 12:22:19 · 645 阅读 · 0 评论 -
一文搞定MVCC,没有那么多乱遭的。
数据修改= 往账本写新记录(旧记录存档)读操作= 查某个时间点的账本快照事务提交= 正式确认该笔交易Purge清理= 银行定期归档旧账本通过这种机制,MySQL实现了:✅ 读写不阻塞✅ 高并发下数据一致性✅ 避免大部分锁竞争。原创 2025-06-11 13:36:58 · 484 阅读 · 0 评论 -
MVCC笔试题(含答案)
解析:MySQL 的 MVCC(多版本并发控制)通过 ReadView(读视图 )机制实现,结合数据的版本链(如隐式字段事务 ID、回滚指针等多版本数据存储辅助 ),判断数据可见性,A 多版本数据存储是基础,B 事务数据快照是结果体现,C 锁机制非 MVCC 实现核心 ,所以选 D。在可重复读隔离级别下,解决幻读问题主要依靠。若业务需彻底避免幻读,也可将隔离级别提至。,但会牺牲并发性能,需权衡使用。原创 2025-06-17 16:14:51 · 321 阅读 · 0 评论 -
Mysql如何解决幻读问题
幻读(Phantom Read)是数据库并发控制中的一个重要问题,指在同一事务内,连续执行两次相同的查询,第二次查询看到了第一次查询未看到的新插入行(这些行是其他事务提交的)。原创 2025-06-16 14:17:50 · 431 阅读 · 0 评论 -
Mysql的B+树笔试题(含答案)
解析:MySQL的B + 树叶子节点页内记录是按索引顺序存储的,查找时从页内第一条记录开始依次遍历(线性查找 ),并非二分(页内记录无序不适用 )、哈希(无哈希结构 )、广度优先(不用于页内 ),所以选A。解析:B + 树叶子节点组内记录是按链表存储的,定位到组后,需沿链表遍历才能找到目标记录,A、B、C 不是该操作的原因,所以选 D。解析:MySQL的B + 树叶子节点页目录分组数量范围是1 - 8条,这是InnoDB的实现特性,用于优化页内查找效率,所以选B。原创 2025-06-17 16:22:29 · 139 阅读 · 0 评论 -
Mysql事务笔试题(含答案)
MVCC 以undo log 存储数据历史版本为基础,通过ReadView 动态判断记录可见性,精准区分读已提交和可重复读的隔离级别逻辑;同时,通过“读写操作基于不同版本并行执行”,从机制上解耦读写冲突,最终实现并发度的提升。这也是 InnoDB 能支撑高并发业务的核心原因之一。答案:A解析:事务通过ACID特性(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability )保障数据一致性;原创 2025-06-17 16:33:44 · 608 阅读 · 0 评论 -
Mysql的最左前缀匹配原则是什么?
最左前缀匹配原则(Leftmost Prefix Principle)是MySQL中B-Tree索引使用的一个重要原则,它决定了复合索引(多列索引)如何被查询利用。原创 2025-06-17 16:05:53 · 283 阅读 · 0 评论 -
MySQL 中索引、锁、事务、隔离级别与并发读问题的深层关联
索引决定锁的粒度,是高性能的基础。事务是锁的载体,控制锁的生命周期。隔离级别通过不同的锁策略,平衡一致性与性能。锁是解决并发读问题的核心手段。理解这些组件的内在联系,才能在设计高并发系统时做出合理的选择。记住:没有万能的解决方案,只有针对特定场景的最优策略。原创 2025-06-13 16:19:59 · 680 阅读 · 0 评论