04 非结构存储:用好 JSON 这张牌 04 非结构存储:用好 JSON 这张牌前面几讲,我已经带你了解了 MySQL 数据库中常见的 3 种类型:数字类型、字符串类型和日期类型。然而,它们都属于传统关系型设计的范畴。 关系型的结构化存储存在一定的弊端,因为它需要预先定义好所有的列以及列对应的类型。但是业务在发展过程中,或许需要扩展单个列的描述功能,这时,如果能用好JSON 数据类型,那就能打通关系型和非关系型数据 2022-08-23 专栏 > MySQL实战宝典
05 表结构设计:忘记范式准则 05 表结构设计:忘记范式准则前面几讲我虽然带你了解了数字类型、字符串、日期类型,以及非结构化的 JSON 类型,但也只是每条记录每个字段的选择。 而我们在对一张表进行设计时,还要遵守一些基本的原则,比如你经常听见的“范式准则”。但范式准则过于理论,在真实业务中,你不必严格遵守三范式的要求。而且有时为了性能考虑,你还可以进行反范式的设计,比如在数据仓库领域。这一讲我就会带你了 2022-08-23 专栏 > MySQL实战宝典
06 表压缩:不仅仅是空间压缩 06 表压缩:不仅仅是空间压缩前面几讲,我们从最早的各种列类型的选择,过渡到表结构的设计,相信学完前面几讲,你已经能够较好地设计出各种业务表,比如用户表、订单表。既然我们已经掌握了表的逻辑设计,那这一讲就继续学习不同业务表的物理存储设计。 据我观察,很多同学不会在表结构设计之初就考虑存储的设计,只有当业务发展到一定规模才会意识到问题的严重性。而物理存储主要是考虑是否要启用表的 2022-08-23 专栏 > MySQL实战宝典
07 表的访问设计:你该选择 SQL 还是 NoSQL? 07 表的访问设计:你该选择 SQL 还是 NoSQL?到目前为止,我已经带你学习了表结构的字段类型选择和表的物理存储设计,这一讲我们将继续学习表的访问选型。这样一来,字段类型选择 + 物理存储设计 +表的访问设计,就完成了表结构设计的所有内容。 前面 6 讲,我演示的都是通过 SQL 的方式对表进行访问,但从 MySQL 5.6 版本开始,就支持除 SQL 外的其他访问方式 2022-08-23 专栏 > MySQL实战宝典
08 索引:排序的艺术 08 索引:排序的艺术在模块一中,我们学习了怎么根据合适的类型正确地创建一张表,但创建的表不能立刻用在真正的业务系统上。因为表结构设计只是设计数据库最初的环节之一,我们还缺少数据库设计中最为重要的一个环节——索引设计,只有正确设计索引,业务才能达到上线的初步标准 。 所以模块二我会讲索引的设计、业务应用与调优等案例。今天我们先来学习关系型数据库最核心的概念——索引,对索引做一 2022-08-23 专栏 > MySQL实战宝典
10 组合索引:用好,性能提升 10 倍! 10 组合索引:用好,性能提升 10 倍!在前两讲中,我带你学习了索引的数据结构和索引组织表,相信你应该掌握了怎么在 MySQL 数据库中创建索引以及一些基本的使用技巧。 当然,前两讲我举的例子都是基于一个列进行索引排序和使用,比较简单。在实际业务中,我们会遇到很多复杂的场景,比如对多个列进行查询。这时,可能会要求用户创建多个列组成的索引,如列a 和 b 创建的组合索引,但究 2022-08-23 专栏 > MySQL实战宝典
09 索引组织表:万物皆索引 09 索引组织表:万物皆索引上一讲,我已经带你了解了 B+ 树索引的基本概念,以及 MySQL 中怎么对 B+ 树索引进行基本的管理。为了让你进一步深入了解 MySQL 的 B+树索引的具体使用,这一讲我想和你聊一聊 MySQL InnoDB 存储引擎的索引结构。 InnoDB 存储引擎是 MySQL 数据库中使用最为广泛的引擎,在海量大并发的 OLTP 业务中,InnoDB 2022-08-23 专栏 > MySQL实战宝典
13 子查询:放心地使用子查询功能吧! 13 子查询:放心地使用子查询功能吧!今天我想和你聊一聊“子查询”。 上一讲,我提到了一种复杂的 SQL 情况,多表间的连接,以及怎么设计索引来提升 JOIN 的性能。 除了多表连接之外,开发同学还会大量用子查询语句(subquery)。但是因为之前版本的MySQL 数据库对子查询优化有限,所以很多 OLTP业务场合下,我们都要求在线业务尽可能不用子查询。 然而,MySQL 2022-08-23 专栏 > MySQL实战宝典
11 索引出错:请理解 CBO 的工作原理 11 索引出错:请理解 CBO 的工作原理在前三讲中,我们学习了 B+ 树索引的原理、索引组织表的实现,组合索引的使用方法,相信你对 B+ 树索引的使用已经有了一定的了解。 而在实际工作中,我也经常会遇到一些同学提出这样的问题:MySQL 并没有按照自己的预想来选择索引,比如创建了索引但是选择了全表扫描,这肯定是 MySQL数据库的 Bug,或者是索引出错了。 当然不是! 这 2022-08-23 专栏 > MySQL实战宝典
12 JOIN 连接:到底能不能写 JOIN? 12 JOIN 连接:到底能不能写 JOIN?前面几讲,我带你学习了索引和优化器的工作原理,相信你已经可以对单表的 SQL 语句进行索引的设计和调优工作。但除了单表的 SQL 语句,还有两大类相对复杂的SQL,多表 JOIN 和子查询语句,这就要在多张表上创建索引,难度相对提升不少。 而很多开发人员下意识地认为 JOIN 会降低 SQL 的性能效率,所以就将一条多表 SQL 2022-08-23 专栏 > MySQL实战宝典