作為一名開發者,我討厭使用我不明白的技術。此外,關係型資料庫已經使用超40年,肯定有它過人的原因。因此,我花了大量時間來想真正弄懂它裡面如同黑盒子那樣的奧秘。關係型資料庫實際上是非常有趣的,因為它是基於實用和復用的概念。但是限於篇幅,以下我將把重點放在資料庫如何處理sql查詢的問題上。本文內容大致劃分為以下三部分:
1.低階資料庫和高階資料庫組成概述
2.查詢優化流程的處理概述
3.事務和緩衝池管理概述
基本概念回顧
在程式設計年代早期,開發者是必須要理解清楚自己所進行操作的原理的。他們對於所使用的演算法和資料結果是了然於胸的,因為他們很注重在計算機配置較低時於cpu和記憶體上的開銷。在這一節,我首先要介紹的是資料庫索引。
o(1) vs o(n2)
時間複雜度用於計算演算法處理資料的用時。科學家使用大o表示法來進行時間複雜度描述,其定義是對於輸入的資料演算法需要進行多少步運算。這裡要強調的是,它的核心是資料量增加對運算增加的影響而不是資料量的多少。時間複雜度不會直接給出精確的運算步數,而是以趨勢的方式展示。
在上圖中,你可以看到不同複雜度的發展趨勢,我使用的方法是對數法。換言之,資料量將會從1快速地增加到10億。我們可以得出以下結論:
舉例說明
如果是處理少量資料,o(1)和o(n2)的差別是不明顯的。例如是2000個運算元素:
儘管o(1) 和 o(n2)的運算量的差距是4百萬,但是這僅需2ms,也就是眨眼的功夫。此外,如果使用的是多核處理器,其運算速度會更快。所以效能和優化問題在現在的重視程度無法跟以往相比。
如果處理的資料量是1 000 000,其結果又會如何呢?
這樣一來,你可以先喝杯咖啡休息下再回來看結果了!如果再加個0,你可以先進行午休了!
進一步說明
時間複雜度的型別有:
時間複雜度通常是最差時間場合。除了時間複雜度,複雜度還可以用來表示記憶體使用和磁碟i/o占用情況等。誠然,比n2更複雜的計算有n4,3n,nn 。
合併排序
如果你要對乙個集合進行排序該如何做呢?什麼?使用sort()?聽起來是個好的答案。
但如果排序物件是乙個資料庫,你就務必知道sort()的工作原理。這裡我介紹排序演算法中最重要的一種:合併排序。對合併排序理解透徹,一方面可以掌握如何進行查詢優化,二來可以更好地理解本文稍後說到的合併join運算。
合併(merge)
合併排序的運算過程是:合併兩個已排序的n/2陣列到乙個已排序n個元素陣列,例如下圖所示:
關係型資料庫是如何運作的 上
作為一名開發者,我討厭使用我不明白的技術。此外,關係型資料庫已經使用超40年,肯定有它過人的原因。因此,我花了大量時間來想真正弄懂它裡面如同黑盒子那樣的奧秘。關係型資料庫實際上是非常有趣的,因為它是基於實用和復用的概念。但是限於篇幅,以下我將把重點放在資料庫如何處理sql查詢的問題上。本文內容大致劃...
什麼是關係型資料庫
1.關係型資料庫簡單的可以理解為二維資料庫,表的格式就如excel,有行有列。常用的關聯式資料庫有oracle,sqlserver,informix,mysql,sybase等。也即是我們平時看到的資料庫,都是關係型資料庫 2.所謂關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在19...
什麼是關係型資料庫?
關聯式資料庫是建立在關係模型基礎上的資料庫,借助於集合代數等數學概念和方法來處理資料庫中的資料,現實世界中的各種實體以及實體之間的各種聯絡均用關係模型來表示。關係模型是由埃德加 科德於1970年首先提出的,並配合 科德十二定律 現如今雖然對此模型有一些批評意見,但它還是資料儲存的傳統標準。標準資料查...