哈Ha!我向您提供文章
“关系数据库如何工作”的翻译。
当涉及到关系数据库时,我不禁认为有些东西丢失了。它们无处不在。有许多不同的数据库:从小型且有用的SQLite到功能强大的Teradata。但是只有几篇文章解释了数据库的工作方式。您可以搜索“ howdoesarelationaldatabasework”(“关系数据库如何工作”)以查看结果很少。而且,这些文章简短。如果您正在寻找最新的流行技术(BigData,NoSQL或JavaScript),则会找到更多深入的文章来解释它们的工作原理。
关系数据库是否太老太无聊,无法在大学课程,研究论文和书籍之外进行解释?

, . 40 , . , - , . , . , , .
, , , . , , CRUD; . , , .
, (BigO). , , . , , : SQL . , , .
, , , . ; .
, 3 :
( , ...), , . , .
, . .
O(1) vs O(n2)
… !
( ) , . , ! , . (cost based optimization).
, . , . , , .
, " O (some_function() )", , some_function(a_certain_amount_of_data) .
**, , ** . , .

. , . , 1 1 . , :
- O(1) ( ).
- O(log(n)) .
- — O(n2), .
- .
O(1) O(n2) . , , , 2000 .
- O (1) 1
- O (log (n)) 7
- O (n) 2 000
- O (n * log (n)) 14 000
- O (n2) 4 000 000
O(1) O(n2) (4 ) 2 , . , . -.
, - . 1 000 000 ( ):
- O (1) 1
- O (log (n)) 14
- O (n) 1 000 000
- O (n * log (n)) 14 000 000
- O (n2) 1 000 000 000 000
, , O (n2) ( !). 0 , , .
:
- - O (1).
- O (log (n)).
- O (n).
- O (n * log (n)).
- O (n2).
: .
:
.
, :
, , n2, :
- n4: ! .
- 3n: ! , , ( ).
- n: .
- nn: , , ...
: « », . () .
MergeSort ( )
, ? ? sort ()… , … , sort ().
, : . , , , , . , join , merge join ( ).
Merge ()
, : 2 N / 2 N- N . .
, :

, 8 2 4- . 4- :
- 1) ( = )
- 2) , 8
- 3) ,
- 1,2,3, .
- , 8 .
, 4- , «» .
, , merge:
array mergeSort(array a)
if(length(a)==1)
return a[0];
end if
//recursive calls
[left_array right_array] := split_into_2_equally_sized_arrays(a);
array new_left_array := mergeSort(left_array);
array new_right_array := mergeSort(right_array);
//merging the 2 small ordered arrays into a big one
array result := merge(new_left_array,new_right_array);
return result;
, , (: ). , ; , . , :
Division phase ( )

3 . — log(N) ( N=8, log(N) = 3).
?
! — . , 2. — , . ( 2).
Sorting phase ( )

() . , N = 8 :
log (N) , N * log(N) .
merge sort
?
:
: in-place ( ).
: .
, Hadoop ( ).
( ) , . , , .
, -
, , 3 . , . .
— . . :

2- :
- , .
- (integer, string, date …).
, , .
, , , , , . N , N — , , ? .
: : heap-organizedtables index-organizedtables. .
— , :
,

N = 15 . , 208:
- , 136. 136<208, 136.
- 398>208, , 398
- 250>208, , 250
- 200<208, , 200. 200 , ( , , 200).
, , 40
- , 136. 136 > 40, 136.
- 80 > 40, , 80
- 40= 40, . ( ) .
- , , , .
. , , log (N) . , log(N), !
, . integer, , - . , , "country" (column 3) :
log(N) N . , — .
(, , 2 , , …) , (.. ) ( ).
B+TreeIndex
, , . O(N) , (, ). , -, . . B+Tree. B+Tree :

, ( ). , , « », ( ). O(log(N)) ( ). , .
B+Tree, 40 100:
- 40 ( 40, 40 ), .
- 40, , 100.
, M , N . log(N) . , , M M . M+log(N) N . , ( M + log (N) ), . (, 200 ) N (1 000 000 ), .
(!). (, , B+Tree):
- B+Tree, .
- B+Tree, O (log (N)) O (N).
, B+Tree . , . : B+ O (log (N)). , . , / / , O (log (N)) . , ( ).
, B+Tree. B+Tree , MySQL. , InnoDB ( MySQL) .
: , - B+ .
Hashtable (-)
— -. , . , - , - ( hash join). (, , ).
- — , . - :
:

- 10 . , 5 , , , 5 . - 10 . , , :
, , .
, 78:
- - - 78, 8.
- - 8, , , 78.
- 78
- 2 ( -, ).
, , 59:
- - - 59, 9.
- - 9 , — 99. 99!=59, 99 .
- , (9), (79), …, (29).
- .
- 7 .
-
, , , !
- 1 000 000 ( , 6 ), 1 , 000059 . — -, , .
- . , - , :
- - O(1).
vs -
?
, .
- 哈希表可以部分加载到内存中,其余的段可以保留在磁盘上。
- 对于数组,必须使用内存中的连续空间。如果要加载一张大桌子,很难找到足够的连续空间。
- 对于哈希表,您可以选择所需的键(例如,国家/地区和人员名称)。
有关更多信息,您可以阅读Java HashMap上的文章,它是哈希表的有效实现。您无需了解Java就可以了解本文介绍的概念。