資料庫引擎學習總結

2021-08-20 02:55:42 字數 3235 閱讀 7599

一:資料庫引擎的定義

資料庫引擎簡單來說就是乙個"資料庫發動機"。當你訪問資料庫時,不管是手工訪問,還是程式訪問,都不是直接讀寫資料庫檔案,而是通過資料庫引擎去訪問資料庫檔案。以關係型資料庫為例,你發sql語句給資料庫引擎,

資料庫引擎解釋sql語句,提取出你需要的資料返回給你。因此,對訪問者來說,資料庫引擎就是sql語句的直譯器。

正式來說,資料庫引擎是用於

儲存、處理和保護資料的核心服務。利用資料庫引擎可以

控制訪問許可權快速處理事務,從而滿足企業內大多數需要

處理大量資料的應用程式的要求,這包括

建立用於儲存資料的表和用於檢視、管理和保護資料安全的資料庫物件(如索引、檢視和儲存過程)。

二:資料庫引擎的任務

1:設計並建立資料庫以儲存系統所需要的關係或xml文件

3:為單位或使用者部署實現的系統

4:提供日常管理支援優化資料庫的效能。

三:mysql引擎的類別

你能用的資料庫引擎取決於mysql在安裝的時候是如何被編譯的。要新增乙個新的引擎,就必須重新編譯mysql。在

預設情況下,mysql支援三個引擎:isam、myisam和heap。另外兩種型別innodb和berkley(bdb),也常常可以使用。如果技術高超,還可以使用mysql+api自己做乙個引擎。

1:isam引擎

isam的結構如下圖:

isam的主要不足之處在於,它不支援事務處理、不支援外來鍵、不能夠容錯、也不支援索引。因為isam不支援事務,所以如果你的硬碟崩潰了,那麼資料檔案就無法恢復了。所以如果你正在把isam用在關鍵任務應用程式裡,那就必須經常備份你所有的實時資料,通過其複製特性,mysql能夠支援這樣的備份應用程式。

2:myisam引擎

myisam是mysql的isam擴充套件格式。除了提供isam裡所沒有的索引(isam允許沒有任何索引和主鍵的表存在,索引都是儲存行的位址)和字段管理的大量功能,

myisam還使用一種**鎖定的機制(表級鎖),來優化多個併發的讀寫操作,其代價是你需要經常執行optimize table命令,來恢復被更新機制所浪費的空間,否則碎片也會隨之增加,最終影響資料訪問效能。

heap儲存引擎就是將資料儲存在記憶體中,由於沒有磁碟i./o的等待,所以使用該種引擎的表擁有極高的插入、更新和查詢效率。這種儲存引擎預設使用雜湊(hash)索引,其速度比使用b-+tree型要快,但也可以使用b樹型索引。由於這種儲存引擎所儲存的資料儲存在記憶體中,所以其儲存的資料具有不穩定性,比如如果mysqld程序發生異常、重啟或計算機關機等等都會造成這些資料的消失,所以這種儲存引擎中的表的生命週期很短,一般只使用一次。

4:innodb引擎

in弄db資料庫引擎是早就mysql靈活性的技術的直接產品,這項技術就是mysql+api,在使用mysql的時候,你所面對的每乙個挑戰幾乎都源於isam和myisam資料庫引擎不支援事務處理也不支援外來鍵。

innodb的特點

innodb要比isam和myisam引擎慢

innodb為mysql表提供了acid事務支援,系統崩潰修復能力和多版本併發控制的行級鎖,該引擎提供了行級鎖和外來鍵約束,所以innodb是事務型資料庫首選的引擎。

採用b+樹實現,索引與資料儲存在同一檔案中。

四:innodb與myisam的對比

1:儲存結構

innodb使用共享表空間儲存方式時,所有資料存在乙個單獨的表空間裡面,而這個表空間是由很多個檔案組成的,乙個表可以跨越多個檔案存在,innodb表空間的最大限制為64tb,innodb的表限制基本上在64tb左右,當然這個大小是包括這個表所有索引和其它相關資料。使用單獨表空間儲存方式時,每個表的資料以乙個單獨的檔案來儲存,這個單獨檔案存放,單錶限制了檔案系統的大小。

myisam中每個表被存在分離的檔案中,每個myisam中的表在磁碟上儲存成三個檔案,每乙個檔案的名字均以表的名字開始,副檔名指出檔案型別:.frm檔案儲存表定義;myd檔案儲存表的資料;myi檔案儲存表的索引。

2:儲存空間

上圖是innodb主索引(同時也是資料檔案)的示意圖,可以看到葉節點包含了完整的資料記錄。因為innodb的資料檔案本身要按主鍵聚集,所以innodb要求表必須有主鍵(myisam可以沒有),如果沒有顯式指定,則mysql系統會自動選擇乙個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則mysql自動為innodb表生成乙個隱含字段作為主鍵,這個字段長度為6個位元組,型別為長整形。

myisam引擎的索引結構也是b+tree,其中b+tree的data域儲存的內容為實際資料的位址,也就是說它的索引和實際的資料是分開的,只不過是用索引指向了實際的資料,所以myisam的索引檔案和資料檔案是分開的,索引檔案僅儲存資料記錄的位址。myisam索引是有壓縮的,記憶體使用率就對應提高了不少。

在myisam中,主索引和輔助索引(secondary key)在結構上沒有任何區別,只是主索引要求key是唯一的,而輔助索引的key可以重複。與innodb不同的是myisam輔助索引儲存的

4:是否儲存行數

innodb中不儲存表的具體行數,執行select count(*) from table 時,innodb要掃瞄一遍增高餓表來計算有多少行。

myisam中儲存了表的行數,於是select count(*) from table時只需要直接取已經儲存好的值而不需要進行全表掃瞄。

5:鎖myisam支援的是表級鎖,而innodb支援的是行級鎖。但由於鎖的粒度更小,寫操作不會鎖定全表,所以在併發較高時,使用innodb引擎會提公升效率。但是使用行級鎖也不是絕對的,如果在執行乙個sql語句時mysql不能確定要掃瞄的範圍,innodb表同樣會鎖全表,例如update table set num=1 where name like 「a%」

6:可移植性、備份及恢復

資料庫儲存引擎學習

1.什麼是儲存引擎 mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中,這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並最終提供不同的功能和能力,這些不同的技術以及配套的相關功能在mysql中稱為儲存引擎 也稱為表型別 mysql支援多個儲存引擎,包括處理事務安全表的引擎和...

mysql資料庫引擎 mysql資料庫引擎

資料庫引擎是用於儲存 處理和保護資料的核心服務。利用資料庫引擎可控制訪問許可權並快速處理事務,從而滿足企業內大多數需要處理大量資料的應用程式的要求。使用資料庫引擎建立用於聯機事務處理或聯機分析處理資料的關聯式資料庫。這包括建立用於儲存資料的表和用於檢視 管理和保護資料安全的資料庫物件 如索引 檢視和...

資料庫引擎

用了好久的mysql資料庫,都不知道引擎的具體知識,被面試官虐殘了,希望對大家有幫助 資料庫引擎 1.innodbacid 原子特性 1 提供了行級鎖和外來鍵約束,設計目標是處理大容量資料庫系統,它本身其實就是基於mysql後台的完整資料庫,提供了對資料庫acid的支援,並實現了sql標準的四種事務...