20、思考数据库调优

从这一篇开始,我们正式进入了SQL性能优化篇。在这一模块中,我们会关注如何提升SQL查询的效率。你可以思考一下,如何你是一名DBA或者开发人员,都有哪些维度可以进行数据库调优? 其实关于数据库调优的知识点非常分散。不同的DBMS,不同的公司,不同的职...

SQL必知必会

21、范式设计

在日常工作中,我们都需要遵守一定的规范,比如签到打卡、审批流程等,这些规范虽然有一定的约束感,却是非常有必要的,这样可以保证正确性和严谨性,但有些情况下,约束反而会带来效率的下降,比如一个可以直接操作的任务,却需要通过重重审批才能执行。 实际上,数据...

SQL必知必会

22、反范式设计

上一篇文章中,我们介绍了数据表设计的三种范式。作为数据库的设计人员,理解范式的设计以及反范式优化是非常有必要的。 为什么这么说呢?了解以下几个方面的内容之后你就明白了。 3NF有什么不足?除了3NF,我们为什么还需要BCNF? 有了范式设计,为什么...

SQL必知必会

23、用还是不用索引,这是一个问题

提起优化SQL,你可能会把它理解为优化索引。简单来说这也不算错,索引在SQL优化中占了很大的比重。索引用得好,可以将SQL查询的效率提升10倍甚至更多。但索引是万能的吗?既然索引可以提升效率,只要创建索引不就好了吗?实际上,在有些情况下,创建索引反而...

SQL必知必会

24、我们为什么用B+树来做索引?

上节课我讲到了索引的作用,是否需要建立索引,以及建立什么样的索引,需要我们根据实际情况进行选择。我之前说过,索引其实就是一种数据结构,那么今天我们就来看下,索引的数据结构究竟是怎样的?对索引底层的数据结构有了更深入的了解后,就会更了解索引的使用原则。...

SQL必知必会

25、Hash索引的底层原理是什么?

我们上节课讲解了B+树的原理,今天我们来学习下Hash的原理和使用。Hash本身是一个函数,又被称为散列函数,它可以帮助我们大幅提升检索数据的效率。打个比方,Hash就好像一个智能前台,你只要告诉它想要查找的人的姓名,它就会告诉你那个人坐在哪个位置,...

SQL必知必会

26、通过索引让SQL查询效率最大化

我之前讲了索引的使用和它的底层原理,今天我来讲一讲索引的使用原则。既然我们的目标是提升SQL的查询效率,那么该如何通过索引让效率最大化呢? 今天的课程主要包括下面几个部分: 什么情况下使用索引?当我们进行数据表查询的时候,都有哪些特征需要我们创建索...

SQL必知必会

27、从数据页的角度理解B+树查询

我们之前已经了解了B+树和Hash索引的原理,这些索引结构给我们提供了高效的索引方式,不过这些索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中。 对数据库的存储结构以及页结构的底层进行了解,可以加深我们对索引运行机制的认识,从而你对索引...

SQL必知必会

28、从磁盘IO的角度理解SQL查询成本

在开始今天的内容前,我们先来回忆一下之前的内容。 数据库存储的基本单位是页,对于一棵B+树的索引来说,是先从根节点找到叶子节点,也就是先查找数据行所在的页,再将页读入到内存中,在内存中对页的记录进行查找,从而得到想要数据。你看,虽然我们想要查找的,只...

SQL必知必会

29、为什么没有理想的索引?

我之前讲过页这个结构,表和索引都会存储在页中,不同的DBMS默认的页的大小是不同的,同时我们也了解到DBMS会有缓冲池的机制,在缓冲池里需要有足够多的空间,存储经常被使用到的页,尽可能减少直接的磁盘I/O操作。这种策略对SQL查询的底层执行...

SQL必知必会