接触关系数据库时间一长,我不禁感觉到有什么东西被遗忘了。它们无处不在。我们有各种各样的数据库:从小巧有用的 SQLite 到强大的 Teradata。但是,只有少数几篇文章解释数据库是如何工作的。你可以自己搜索下“关系数据库是如何工作的”,就会发现,这个问题的答案是多么的少。并且,那些文章还都很短。现在,如果你再试着看看最时髦的技术(大数据,NoSQL 或者 JavaScript),你会发现一大堆有深度的文章,来解释它们是如何工作的。
难道是关系数据库太老了,以至于除了在大学课程、研究论文和书籍之外,都不屑于解释下它们是如何工作的?
![](https://box.kancloud.cn/2016-04-26_571f700155634.jpg)
作为一名开发者,我**讨厌**使用那些我不知道原理的技术。并且,数据库已经使用了 40 年了,一定有什么原因才对。多年来,我花费了几百个小时,去真正理解那些我每天都在使用的奇怪的黑箱。关系数据库很有趣,因为它们建立在有用且可重用的概念之上。如果你想了解数据库,但是却没有时间或者没有精力去研究这个广泛的主题,那么,你应该会喜欢这篇文章的。
这篇文章的题目已经明确说明,文章的目的并***不是***理解如何使用数据库。因此,你应该已经知道如何写出简单的连接查询语句以及基本的 CRUD 语句;否则,你可能看不懂这篇文章。这是你开始读这篇文章之前唯一需要知道的事情。其余的事,将由我来解释。
我会从一些计算机科学的概念,比如时间复杂性,开始讲起。我知道你们当中有些人讨厌这些概念,但是,没有它们,你就不能理解数据库中的那些聪明之处。由于这是一个很大的主题,我就从我认为重要的部分讲起:数据库是如何处理 SQL 语句的。我只介绍数据库背后的基本概念,这样,在文章结束的时候,你就可以对数据库中究竟发生了什么有一个比较好的概念。
这篇文章包含了大量算法和数据结构的很长的技术文章,它会需要你拿出很长时间来阅读。有些概念并不好懂,你可以暂时跳过,还是能够获得其它知识。
对于你们中的已经有一定基础的读者,这篇文章可以大致分成三个部分:
* 底层和高层的数据库组件
* 查询优化过程
* 事务和缓冲池管理