mysql數據庫引擎isam(mysql數據庫引擎ISAM)

  • 1、mysql的innodb和myisam的區別
  • 2、MySQL中的ISAM是什麼?
  • 3、Mysql引擎 Innodb和MyISAM的區別

MYISAM 表是典型的數據與索引分離存儲,主鍵和二級索引沒有本質區別。比如在 MYISAM 表裡主鍵、唯一索引是一樣的,沒有本質區別。

MYISAM 表的索引存儲方式最大的缺點沒有按照物理數據行順序存儲,這樣無論對主鍵的檢索還是對二級索引的檢索都需要進行二次排序。

INNODB 表本身是索引組織表,也就是說索引就是數據。下圖表T1的數據行以聚簇索引的方式展示,非葉子節點保存了主鍵的值,葉子節點保存了主鍵的值以及對應的數據行,並且每個頁有分別指向前後兩頁的指針。

INNODB 表不同於 MYISAM,INNODB 表有自己的數據頁管理,默認 16KB。MYISAM 表數據的管理依賴文件系統,比如文件系統一般默認 4KB,MYISAM 的塊大小也是 4KB,MYISAM 表的沒有自己的一套崩潰恢復機制,全部依賴於文件系統。

INNODB 表這樣設計的優點有兩個:

1. 數據按照主鍵順序存儲。主鍵的順序也就是記錄行的物理順序,相比指向數據行指針的存放方式,避免了再次排序。

2. 兩個葉子節點分別含有指向前後兩個節點的指針,這樣在插入新行或者進行頁分裂時,只需要移動對應的指針即可。

但是也有缺點:

1. 二級索引由於同時保存了主鍵值,體積會變大。特別是主鍵設計不合理的時候,比如用 UUID 做主鍵。

2. 對二級索引的檢索需要檢索兩次索引樹。第一次通過檢索二級索引葉子節點,找到過濾行對應的主鍵值;第二次通過這個主鍵的值去聚簇索引中查找對應的行。

ISAM

ISAM是一個定義明確且歷經時間考驗的數據表格管理方法,它在設計之時就考慮到數據庫被查詢的次數要遠大於更新的次數。因此,ISAM執行讀取操作的速度很快,而且不佔用大量的內存和存儲資源。ISAM的兩個主要不足之處在於,它不支持事務處理,也不能夠容錯:如果你的硬盤崩潰了,那麼數據文件就無法恢復了。如果你正在把ISAM用在關鍵任務應用程序里,那就必須經常備份你所有的實時數據,通過其複製特性,MySQL能夠支持這樣的備份應用程序。

MyISAM強調了快速讀取操作,這可能就是為什麼MySQL受到了Web開發如此青睞的主要原因:在Web開發中你所進行的大量數據操作都是讀取操作。所以,大多數虛擬主機提供商和Internet平台提供商(Internet Presence Provider,IPP)只允許使用MyISAM格式。

HEAP

HEAP允許只駐留在內存里的臨時表格。駐留在內存里讓HEAP要比ISAM和MyISAM都快,但是它所管理的數據是不穩定的,而且如果在關機之前沒有進行保存,那麼所有的數據都會丟失。在數據行被刪除的時候,HEAP也不會浪費大量的空間。HEAP表格在你需要使用SELECT表達式來選擇和操控數據的時候非常有用。要記住,在用完表格之後就刪除表格。讓我再重複一遍:在你用完表格之後,不要忘記刪除表格。

InnoDB和Berkley DB

InnoDB和Berkley DB(BDB)數據庫引擎都是造就MySQL靈活性的技術的直接產品,這項技術就是MySQL++ API。在使用MySQL的時候,你所面對的每一個挑戰幾乎都源於ISAM和MyISAM數據庫引擎不支持事務處理也不支持外來鍵。儘管要比ISAM和MyISAM引擎慢很多,但是InnoDB和BDB包括了對事務處理和外來鍵的支持,這兩點都是前兩個引擎所沒有的。如前所述,如果你的設計需要這些特性中的一者或者兩者,那你就要被迫使用後兩個引擎中的一個了。

MYISAM 表是典型的數據與索引分離存儲,主鍵和二級索引沒有本質區別。比如在 MYISAM 表裡主鍵、唯一索引是一樣的,沒有本質區別。

MYISAM 表的索引存儲方式最大的缺點沒有按照物理數據行順序存儲,這樣無論對主鍵的檢索還是對二級索引的檢索都需要進行二次排序。

INNODB 表本身是索引組織表,也就是說索引就是數據。下圖表T1的數據行以聚簇索引的方式展示,非葉子節點保存了主鍵的值,葉子節點保存了主鍵的值以及對應的數據行,並且每個頁有分別指向前後兩頁的指針。

INNODB 表不同於 MYISAM,INNODB 表有自己的數據頁管理,默認 16KB。MYISAM 表數據的管理依賴文件系統,比如文件系統一般默認 4KB,MYISAM 的塊大小也是 4KB,MYISAM 表的沒有自己的一套崩潰恢復機制,全部依賴於文件系統。

INNODB 表這樣設計的優點有兩個:

1. 數據按照主鍵順序存儲。主鍵的順序也就是記錄行的物理順序,相比指向數據行指針的存放方式,避免了再次排序。

2. 兩個葉子節點分別含有指向前後兩個節點的指針,這樣在插入新行或者進行頁分裂時,只需要移動對應的指針即可。

但是也有缺點:

1. 二級索引由於同時保存了主鍵值,體積會變大。特別是主鍵設計不合理的時候,比如用 UUID 做主鍵。

2. 對二級索引的檢索需要檢索兩次索引樹。第一次通過檢索二級索引葉子節點,找到過濾行對應的主鍵值;第二次通過這個主鍵的值去聚簇索引中查找對應的行。

原創文章,作者:KNW9W,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/126156.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KNW9W的頭像KNW9W
上一篇 2024-10-03 23:06
下一篇 2024-10-03 23:06

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Java2D物理引擎簡介及應用

    本文將介紹Java2D物理引擎的基本概念、實現原理及應用案例,以及對應代碼示例。 一、物理引擎概述 物理引擎是一種計算機程序,用於模擬物理系統中的對象和其互動,如重力、碰撞、彈力等…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入數據庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的數據庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28

發表回復

登錄後才能評論