資料庫基礎知識詳解五:MySQL中的索引和其兩種引擎、主從複製以及關係型/非關係型資料庫

投三分的金閃閃發表於2022-04-21

1、MySQL中的索引

在MySQL,索引是由B+樹實現的,B+是一種與B樹十分類似的資料結構。

形如下面這種:

其結構特點

(1)有n課子樹的結點中含有n個關鍵碼。

(2)非根節點子節點數: ceil(m/2)<= k <= m(ceil是天花板函式的意思,也就是向上取整,比如ceil(1.2)=2 ),m為該B+樹的階數。根節點最少有兩個子節點,最多同樣為m個。

(2)葉子節點包含了全部關鍵碼的資訊,及指向含有這些關鍵碼記錄的指標。並且葉子節點根據關鍵碼的大小自小至大的順序連結,葉子節點有相鄰結點的指標。

(3)所有的非葉子節點(B+樹中也稱內部結點,索引節點)可以看成索引部分,都不儲存資料,只儲存索引,結點中僅含有其子樹根節點中最大(或者最小)的關鍵碼,資料都儲存在葉子節點中。

問題:為什麼索引不適用B樹而是B+樹實現?

B+樹比B樹的優點:

  • IO次數少:B+樹的中間節點只存放索引,資料都存在葉子節點中,所以結點中存取的資料更多,使得B+樹更加矮胖,因此可以減少I/O次數。(這裡IO指的是磁碟I/O,每一次查詢,需要把某結點讀到記憶體,然後把目標數和結點中的比較,不一樣則繼續I/O)

  • 範圍查詢效率更高:B樹需要中序遍歷整個樹,B+樹只需要遍歷葉子結點中的連結串列。

  • 查詢效率更加穩定:B樹查詢某個資料最好情況只需到根節點,而最壞情況需要遍歷整個二叉樹。

    B+樹每次查詢都需要從根節點到葉子結點,路徑長度相同,每次查詢效率接近。

問題:為什麼不採用效率更高的雜湊查詢?

採用B+樹索引與雜湊索引的比較:

雜湊索引能以 O(1) 時間進行查詢,但是隻支援精確查詢,無法用於部分查詢和範圍查詢,無法用於排序與分組。B+樹索引支援大於小於等於查詢,範圍查詢。雜湊索引遇到大量雜湊值相等的情況後查詢效率會降低。雜湊索引不支援資料的排序。

2、MySQL的兩種資料庫引擎

(1)InnoDB(in-no-db)

  • 支援事務,可以進行Commit和Rollback。
  • 支援表級鎖和行級鎖,增強了併發性。
  • 支援外來鍵。
  • 支援線上熱備份。

(2)MyISAM(mai-ai-zem)

  • 不支援事務
  • 只支援表級鎖,不支援行級鎖
  • 不支援外來鍵
  • MyISAM 崩潰後發生損壞的概率比 InnoDB 高很多,而且恢復的速度也更慢MyISAM 支援壓縮表和空間資料索引,比InnoDB需要的記憶體和儲存更少MyISAM 管理非事務表。

它提供高速儲存和檢索(MyISAM強調的是效能,每次查詢具有原子性,其執行速度比InnoDB更快),以及全文搜尋能力。如果表比較小,或者是隻讀資料(有大量的SELECT),還是可以使用MyISAM。InnoDB 支援事務,併發情況下有很好的效能,基本可以替代MyISAM。

熱備份和冷備份

熱備份:在資料庫執行的情況下備份的方法。

優點:可按表或使用者備份,備份時資料庫仍可使用,可恢復至任一時間點。但是不能出錯。

冷備份:資料庫正常關閉後,將關鍵性檔案複製到另一位置的備份方式。

優點:操作簡單快速,恢復簡單。

3、主從複製

主從複製(Replication)是指資料可以從一個MySQL資料庫主伺服器複製到一個或多個從伺服器,從伺服器可以複製主伺服器中的所有資料庫或者特定的資料庫,或者特定的表。預設採用非同步模式。

實現原理:

  • 主伺服器 binary log dump 執行緒:將主伺服器中的資料更改(增刪改)日誌寫入 Binary log 中。
  • 從伺服器 I/O 執行緒:負責從主伺服器讀取binary log,並寫入本地的 Relay log。
  • 從伺服器 SQL 執行緒:負責讀取 Relay log,解析出主伺服器已經執行的資料更改,並在從伺服器中重新執行(Replay),保證主從資料的一致性。

4、關係型資料庫和非關係型資料庫

關係型資料庫(如Oracle,MySQL)
表和表、表和欄位、資料和資料存在著關係,它通過資料、關係和對資料的約束三者組成的資料模型來存放和管理資料。
優點:

  • 資料之間存在關係,進行資料的增刪改查的時候較為方便。
  • 關係型資料庫是有事務操作的,便於保證資料的完整性和一致性。
  • 可以通用SQL語言,便於操作者學習使用。

缺點

  • 因為資料和資料是有關係的,底層會執行相關的演算法,大量演算法會降低系統的效率,會降低效能。
  • 面對海量資料的增刪改查和維護的時候會顯的無能為力。
  • 因為是固定的表結構型別,所以靈活度較低。

非關聯式資料庫(如redis和MangDB)
非關係型資料庫嚴格上不是一種資料庫,而是一種資料結構化儲存方法的集合,可以是文件或者鍵值對等。
為了處理大量資料,非關聯式資料庫設計之初就是為了去替代關係型資料庫。
優點

  • 儲存格式較為靈活,儲存資料的格式可以是key-value,文件,圖片形式等等,應用成精更加的廣泛。
  • 速度更快,不僅支援硬碟這樣的載體,還支援另外的儲存器來儲存資料,如Redis就支援記憶體來儲存資料。
  • 能支援對大量資料的查詢和讀寫。

缺點

  • 不支援SQL語言的通用,需要單獨去學習其操作使用。
  • 非關聯式資料庫一般沒有事務處理,較難保證資料的完整性和安全性。
  • 資料結構較複雜,如果要進行復雜的查詢會加大難度。

相關文章