- 博客(48)
- 收藏
- 关注
原创 MySQL45讲 第三十九讲 自增主键为什么不是连续的?——阅读总结
在 MySQL 数据库的使用中,自增主键是一个常见的概念。它通常被设计为在插入数据时自动生成唯一的标识符,以确保数据的完整性和一致性。然而,你可能会发现,自增主键并不总是连续的,看看什么情况下自增主键会出现 “空洞”?
2025-01-09 10:00:08
825
原创 MySQL45讲 第38讲 都说InnoDB好,那还要不要使用Memory引擎?——阅读总结
综上所述,在生产环境中,一般不建议使用普通内存表作为常规数据表,因其存在锁粒度粗和数据持久性差等问题。而 InnoDB 引擎在数据安全和并发性能方面表现出色,适用于大多数业务场景。但内存临时表利用了 Memory 引擎的特性,在特定场景下能够发挥重要作用,如复杂查询中的临时数据存储和加速查询执行等。
2024-12-31 17:00:19
877
原创 MySQL45讲 第三十七讲 什么时候会使用内部临时表?——阅读总结
在 MySQL 数据库的执行过程中,内部临时表扮演着重要的角色。已经了解了 sort buffer、内存临时表和 join buffer 等用于辅助 SQL 语句执行的数据结构,那么 MySQL 究竟在何时会使用内部临时表呢?通过 union 和 group by 这两个典型例子深入剖析内部临时表的工作原理,并探讨其使用场景及优化方法。
2024-12-25 17:18:27
954
原创 MySQL45讲 第三十六讲 为什么临时表可以重名?——阅读总结
在 MySQL 数据库的使用中,临时表是一个非常有用的工具。在之前优化 join 查询的文章里,我们就用到了临时表。那么,临时表到底是什么?它有哪些特性使得它适用于特定场景?
2024-12-25 15:59:36
715
原创 MySQL45讲 第三十五讲 join 语句怎么优化?——阅读总结
在 MySQL 数据库中,join 语句用于连接多个表以获取所需的数据。然而,不同的 join 算法在性能上可能存在差异,因此优化 join 语句对于提高查询效率至关重要。
2024-12-24 11:31:25
898
原创 MySQL45讲 第三十四讲 到底可不可以使用join?——阅读总结
使用join语句作两个表的联合是一把双刃剑,问题主要有以下两个:我们DBA不让使用join,使用join有什么问题呢?如果有两个大小不同的表做join,应该用哪个表做驱动表呢?要回答这两个问题,首先要搞明白join语句的执行过程。
2024-12-12 17:26:26
724
原创 MySQL45讲 第三十三讲 我查这么多数据,会不会把数据库内存打爆?——阅读总结
在 MySQL 数据库管理领域,执行大查询时是否会耗尽数据库内存是一个备受关注的问题。第三十二讲深入探讨这个问题,详细剖析 MySQL 在处理大查询时的内部机制,包括查询结果的发送流程、InnoDB 引擎中 Buffer Pool 的作用以及相关算法的运作原理,同时提供有效的应对策略,以确保数据库在大查询场景下的稳定运行。
2024-11-27 17:34:23
1081
原创 MySQL45讲 第三十二讲 为什么还有kill不掉的语句?——阅读总结
在 MySQL 数据库的操作与管理中,kill命令本应是终止异常或长时间运行语句及连接的有效手段。然而,实际情况却并非总是如此,有时我们会遇到执行kill命令后,语句或连接并未如预期般停止的现象。今天,我们就深入探究 MySQL 中 “杀不掉” 语句背后的复杂原理,通过具体案例剖析原因,并提供相应的应对策略。
2024-11-26 17:27:12
837
原创 MySQL45讲 第三十一讲 误删数据后除了跑路,还能怎么办?——阅读总结
在 MySQL 数据库管理领域,误删数据犹如一场噩梦,可能给企业带来巨大的损失。 MySQL 中误删数据后的应对之策,包括不同类型误删数据(如误删行、误删表或库、使用 rm 命令误删实例等)的恢复方法,以及至关重要的预防措施。同时,还会涉及如何利用并行复制加速恢复过程、搭建延迟复制备库缩短恢复时间,以及在日常工作中如何检查备份有效性等实用内容。
2024-11-25 17:22:41
821
原创 MySQL45讲 第29讲 如何判断一个数据库是不是出问题了?——阅读总结
在 MySQL 数据库的运维管理中,及时准确地判断数据库实例是否出现问题至关重要。这不仅关系到数据的可用性和完整性,还直接影响到业务系统的正常运行。讨如何判断一个 MySQL 数据库实例是否出问题,详细介绍多种检测方法及其优缺点。
2024-11-25 15:45:43
910
原创 MySQL45讲 第二十八讲 读写分离有哪些坑?——阅读总结
在 MySQL 数据库架构中,读写分离是提升系统性能和扩展性的重要策略,尤其适用于读多写少的应用场景。然而,这一策略并非一帆风顺,其中最棘手的问题之一便是 “过期读”。今天,我们将深入探讨 MySQL 读写分离中的过期读现象,详细解析各种应对方案及其优缺点。
2024-11-21 17:34:41
902
原创 MySQL45讲 第二十七讲 主库故障应对:从库切换策略与 GTID 详解——阅读总结
在 MySQL 数据库架构中,一主多从结构被广泛应用于应对读多写少的业务场景,以提升系统的读性能。然而,当主库出现故障时,如何确保从库能够顺利接管并保证数据的一致性和完整性,成为了至关重要的问题。今天,我们将深入探讨一主多从架构下主库故障后的主备切换问题,重点介绍基于位点和基于 GTID(Global Transaction Identifier)的两种切换方式及其原理、优缺点。
2024-11-20 16:52:02
710
原创 MySQL45讲 第二十六讲 备库为什么会延迟好几个小时?——阅读总结
在MySQL数据库的主备架构中,备库延迟是一个需要重点关注的问题。它可能影响系统的可用性和数据的一致性,尤其是在主库压力较大时,备库延迟可能达到数小时甚至永远无法追上主库。今天,我们将深入探讨MySQL备库延迟的原因,重点聚焦于备库并行复制能力以及各种并行复制策略的原理、优缺点。MySQL的多线程复制策略经历了多个版本的演进,从非官方的按表、按行分发策略到官方的按库并行、基于组提交和WRITESET的并行复制策略。不同策略各有优缺点,适用场景不同。
2024-11-20 16:10:26
878
原创 MySQL45讲 第二十五讲 高可用性深度剖析:从主备原理到策略选择
在当今数字化时代,数据库的高可用性对于企业的业务连续性至关重要。MySQL 作为广泛使用的关系型数据库管理系统,其高可用性机制一直备受关注。今天,我们将深入探讨 MySQL 是如何保证高可用性的,这涉及到主备关系中的数据同步、主备延迟的产生原因及应对策略,以及主备切换时可靠性优先和可用性优先策略的权衡。
2024-11-18 16:55:47
1350
原创 MySQL45讲 第二十四讲 MySQL是怎么保证主备一致的?——阅读总结
在 MySQL 数据库的世界里,主备一致性是确保数据可靠性和高可用性的关键。就深入探讨 MySQL 是如何保证主备一致的,这涉及到 binlog 的多种格式、主备复制的详细流程以及双 M 结构下的循环复制问题等诸多重要知识点。
2024-11-18 16:09:38
831
原创 MySQL45讲 第二十三讲 是怎么保证数据不丢的?
在 MySQL 的世界里,数据的可靠性是至关重要的。今天,我们将深入探讨 MySQL 是如何保证数据不丢的,这涉及到 binlog 和 redo log 的写入机制,以及一些关键参数的设置。
2024-11-14 16:24:18
895
原创 MySQL45讲 第二十二讲 有哪些“饮鸩止渴”提高性能的方法?
在 MySQL 数据库的运维与开发领域,我们常常会面临一些紧急情况,特别是在业务高峰期,数据库压力骤增,性能问题亟待解决。本讲探讨 MySQL 在这种情况下的 “饮鸩止渴” 式性能提升方法,剖析其背后的原理、适用场景以及潜在风险。
2024-11-14 15:06:06
1261
原创 MySQL45讲 第二十一讲 为什么我只改一行的语句,锁这么多?
本文所有案例在可重复读隔离级别下验证,该级别遵守两阶段锁协议,加锁资源在事务提交或回滚时释放。读提交隔离级别下锁范围更小、时间更短,但外键场景较复杂。其与可重复读隔离级别相比,去掉了间隙锁部分(外键场景除外),且语句执行完后会释放 “不满足条件的行” 上的行锁。希望通过这些案例,大家能清晰理解 next - key lock 概念,学会用加锁规则判断语句加锁范围,在业务中合理设计数据库操作语句,提升系统性能。
2024-11-13 15:31:28
1041
原创 MySQL45讲 第二十讲 幻读是什么,幻读有什么问题?
幻读究竟是什么呢?简单来说,在可重复读隔离级别下,当一个事务对同一个范围进行前后两次查询时,后一次查询竟然发现了前一次查询中未曾出现的行。这就好比在一个神秘的魔法世界里,数据会 “凭空” 出现或消失,让人捉摸不透。假设有一个名为t在这个表中,除了主键id外,还有一个索引c,并且已经初始化插入了 6 行数据。现在,我们考虑这样一个事务操作序列。在事务 A 中,执行了三次查询语句,分别标记为 Q1、Q2 和 Q3。根据事务可见性规则,这些查询使用了当前读,应该能够读到所有已提交记录的最新值。
2024-11-13 10:40:42
976
原创 MySQL45讲 第十九讲 为什么我只查一行的语句,也执行这么慢?
第十九讲通过多种场景展示了 “查一行” 语句在 MySQL 中可能出现的性能问题,包括被各种锁阻塞导致长时间不返回和因一致性读等原因导致查询慢。在实际应用中,尽管场景可能更复杂,但可按照文中介绍的定位方法(如查看等)来解决问题。
2024-11-12 17:30:24
1013
原创 MySQL 数据表常用编码类型解析
在 MySQL 数据库的使用中,正确选择数据表的编码类型对于数据的存储、检索以及应用的稳定性至关重要。不同的编码类型适用于不同的场景,下面我们将深入探讨 MySQL 数据表中常用的编码类型,并结合实际例子进行说明。
2024-11-06 17:18:37
1063
原创 MySQL45讲 第十八讲 为什么这些SQL语句逻辑相同,性能却差异巨大?
在 MySQL 的使用中,一些看似逻辑相同的 SQL 语句,性能却可能存在巨大差异。不恰当的 SQL 语句可能导致数据库压力增大。本文将分享三个典型案例,深入分析其原因,并提供优化思路,帮助读者避免类似性能问题。
2024-11-06 16:49:12
908
原创 MySQL45讲 第十七讲 如何正确地显示随机消息?
本文从一个英语学习 App 首页随机显示单词的功能出发,如果数据库有1万个单词,我要从中选择3个单词作为App首页的单词,如果处理不当,进入App首页会出现卡顿。所以在开发应用程序时,经常会遇到随机排序数据的需求。探讨 MySQL 中实现随机排序的多种方法,包括使用order by rand()的方式以及自行设计的随机算法,并分析它们的执行流程、性能问题及优化策略。
2024-11-06 15:39:02
1050
原创 MySQL45讲 第十六讲 “order by”是怎么工作的?
在应用开发中,经常需要根据指定字段排序显示结果。本文以查询城市为 “杭州” 的市民信息并按姓名排序为例,深入探讨 MySQL 中 “order by” 语句的执行流程、不同算法以及相关优化策略,避免在开发中出现性能问题。
2024-11-05 16:42:14
1645
原创 MySQL45讲 第十四讲 count(*)这么慢,我该怎么办?
MyISAM 引擎将表的总行数存储在磁盘上,执行count (*)时可直接返回,效率高。InnoDB引擎执行 count (*)时,需逐行读取数据并累积计数,这是因为在多版本并发控制(MVCC)机制下,不同事务对表总行数的 “可见性” 不同。
2024-11-05 10:02:46
733
1
原创 MySQL45讲 第十三讲 为什么表数据删掉一半,表文件大小不变?
如果要收缩一个表,只是delete掉表里面不用的数据的话,表文件的大小是不会变的,你还要通过命令重建表,才能达到表文件变小的目的。我跟你介绍了重建表的两种实现方式,Online DDL的方式是可以考虑在业务低峰期使用的,而MySQL 5.5及之前的版本,这个命令是会阻塞DML的,需要特别小心。
2024-11-05 07:00:00
772
原创 MySQL45讲 第十二讲 为什么我的MySQL会“抖”一下?
在日常使用 MySQL 时,可能会遇到 SQL 语句执行速度不稳定的情况,有时正常执行很快,但偶尔会突然变慢,就像数据库 “抖” 了一下。这篇文章将深入探究这种现象背后的原因以及应对方法。
2024-11-04 09:53:43
808
原创 MySQL45讲 第十一讲 怎么给字符串字段加索引?
在数据库应用中,字符串字段的索引创建至关重要。第十一讲将以支持邮箱登录的系统用户表为例,深入探讨字符串字段索引的创建方式及其优缺点。
2024-11-04 09:26:06
964
原创 MySQL45讲 第十讲 MySQL为什么有时候会选错索引?
在 MySQL 中,索引选择由优化器负责,其目标是以最小代价执行语句,但有时会选错索引,导致执行速度变慢。
2024-11-01 17:28:07
462
原创 排序算法:从原理到 Java 实现
排序算法是计算机科学中的基础算法之一,掌握不同的排序算法对于提高编程能力和解决实际问题非常重要。本文介绍了六种常见的排序算法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序以及堆排序,并通过 Java 代码实现展示了它们的工作原理。在实际应用中,我们需要根据数据规模、时间复杂度、空间复杂度和稳定性等因素选择合适的排序算法。希望本文能够帮助读者更好地理解排序算法,并在实际编程中灵活运用。
2024-11-01 17:03:26
1213
原创 MySQL45讲 第九讲 普通索引与唯一索引:性能考量与选择策略
业务代码已经保证不会写入重复数据的前提条件下,普通索引在配合 change buffer 使用时,对数据量大的表更新优化明显,尤其在机械硬盘场景下收效显著。如果无法保证业务代码不会写入重复数据的前提下,或者业务就是要求数据库来做约束,那么没得选, 必须创建唯一索引。
2024-10-31 15:44:18
1174
原创 MySQL45讲 第八讲 事务到底是隔离的还是不隔离的?
在 MySQL 的事务处理中,**事务隔离级别与数据一致性是至关重要的概念**。可重复读隔离级别看似使事务不受外界影响,但实际情况中事务间的相互作用却较为复杂。本文将深入探讨事务隔离级别的实现原理,包括 MVCC(多版本并发控制)机制、一致性读视图(read-view)的构建以及当前读与一致性读的区别。通过详细分析事务执行过程中的数据可见性规则,帮助读者理解事务之间的相互影响,以及如何在实际应用中避免可能出现的问题。
2024-10-31 15:12:33
484
原创 使用Navicat连接远程服务器中在docker中运行的MySQL数据库保姆级教程
使用Navicat连接远程服务器中在docker中运行的MySQL数据库保姆级教程,就两个步骤,简单快捷。
2024-10-30 10:18:10
1157
1
原创 第2讲,日志系统:一条SQL更新语句是如何执行的?
这一讲,重点讲解了MySQL中绕不过去的两道坎:redo log和bin log。一条更新语句的执行过程,同样需要经历跟查询语句一样的过程。注意,更新语句会把查询缓存全部清空,所以这是建议不使用缓存的原因。
2024-06-24 18:50:16
757
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人