http://blog.jobbole.com/100349/
关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Teradata 。但很少有文章讲解数据库是如何工作的。
1 回到基础
1.1 O(1) vs O(n2)
- 1.1.1 The concept
- 1.1.2 Examples
- 1.1.3 Going deeper
1.2 Merge Sort
1.2.1 Merge
1.2.2 Division phase
1.2.3 Sorting phase
1.2.4 The power of the merge sort
1.3 Array, Tree and Hash table
1.3.1 Array
1.3.2 Tree and database index
1.3.3 Hash table
2 Global overview
3 Client manager
4 Query manager
4.1 Query parser
4.2 Query rewriter
4.3 Statistics
4.4 Query optimizer
4.4.1 Indexes
4.4.2 Access Path
4.4.3 Join operators
4.4.4 Simplified example
4.4.5 Dynamic programming, greedy algorithm and heuristic
4.4.6 Real optimizers
4.4.7 Query Plan Cache
4.5 Query executor
5 Data manager
5.1 Cache manager
5.1.1 Prefetching
5.1.2 Buffer-Replacement strategies
5.1.3 Write buffer
5.2 Transaction manager
5.2.1 I’m on acid
5.2.2 Concurrency Control
5.2.3 Lock manager
5.2.4 Log manager
6 To conclude
______________________________________________________________________________________________________
我的学习习惯,导致我喜欢追寻事情的来源。
这篇文章大约分为3个部分:
- 底层和上层数据库组件概况
- 查询优化过程概况
- 事务和缓冲池管理概况
数据库索引的概念
时间复杂度
时间复杂度用来检验某个算法处理一定量的数据要花多长时间。为了描述这个复杂度,计算机科学家使用数学上的『简明解释算法中的大O符号』。这个表示法用一个函数来描述算法处理给定的数据需要多少次运算。
比如,当我说『这个算法是适用 O(某函数())』,我的意思是对于某些数据,这个算法需要 某函数(数据量) 次运算来完成。
重要的不是数据量,而是当数据量增加时运算如何增加。时间复杂度不会给出确切的运算次数,但是给出的是一种理念。
- 搜索一个好的哈希表会得到 O(1) 复杂度
- 搜索一个均衡的树会得到 O(log(n)) 复杂度
- 搜索一个阵列会得到 O(n) 复杂度
- 最好的排序算法具有 O(n*log(n)) 复杂度
- 糟糕的排序算法具有 O(n^2) 复杂度
注:在接下来的部分,我们将会研究这些算法和数据结构。
阵列,树和哈希表