tft每日頭條

 > 科技

 > mysql的索引存儲與劃分

mysql的索引存儲與劃分

科技 更新时间:2025-03-15 13:36:03
1、MySQL中的索引

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

形如下面這種:

mysql的索引存儲與劃分(MySQL中的索引和其兩種引擎)1

其結構特點

(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語言的通用,需要單獨去學習其操作使用。
  • 非關系數據庫一般沒有事務處理,較難保證數據的完整性和安全性。
  • 數據結構較複雜,如果要進行複雜的查詢會加大難度。
,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved