mysql 資料引擎

2021-08-06 04:55:42 字數 2510 閱讀 1368

mysql中的資料用各種不同的技術儲存在檔案(或者記憶體)中。這些技術中的每一種技術都使用不同的儲存機制、索引技巧、鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。這些不同的技術以及配套的相關功能在mysql中被稱作儲存引擎(也稱作表型別),mysql預設配置了許多不同的儲存引擎,可以預先設定或者在mysql伺服器中啟用,

鍵入show engines檢視資料庫支援的引擎。

innodb:innodb引擎提供了對資料庫acid事務的支援,所謂事務處理,就是原子性操作。打個比方,支援事務處理的innodb表。你執行乙個insert語句,插入後就要執行乙個update語句來修改其他相關的資料。假設一種特殊情況突然發生,insert成功了但是update沒有成功,這時候資料會混亂。如果使用了事務處理,insert和update都放入到事務中去執行,這個時候,只有當insert和update兩條語句都執行生成的時候才會將資料更新、寫入到中,如果其中任何一條語句失敗,那麼就會回滾為初始狀態,不執行寫入。這樣就保證了insert和update肯定是一同執行的。除此之外它還提供了行級鎖和外來鍵的約束。鎖行,就是說,你執行update語句是,只會將這一條記錄進行鎖定,只有針對這條記錄的其他寫入、更新操作會被阻塞並等待這條update語句執行完畢後再執行,針對其他記錄的寫入操作不會有影響。它的設計的目標就是處理大資料容量的資料庫系統。它本身實際上是基於mysql後台的完整的系統。mysql執行的時候,innodb會在記憶體中建立緩衝池,用於緩衝資料和索引。但是,該引擎是不支援全文搜尋的。同時,啟動也比較的慢,它是不會儲存表的行數的。當進行select count(*) from table指令的時候,需要進行掃瞄全表。所以當需要使用資料庫的事務時,該引擎就是首選。由於鎖的粒度小,寫操作是不會鎖定全表的,所以在併發度較高的場景下使用它會提公升效率的。

myisam:不提供事務的支援,也不支援行級鎖和外來鍵。因此當執行insert插入和update更新語句時,即執行寫操作的時候需要鎖定這個表。所以會導致效率會降低。不過和innodb不同的是,myiasm引擎是儲存了表的行數,於是當進行select count(*) from table語句時,可以直接的讀取已經儲存的值而不需要進行掃瞄全表。所以,如果表的讀操作遠遠多於寫操作時,並且不需要事務的支援的。可以將myiasm作為資料庫引擎的首先

。對於myiasm引擎來說,b+樹的資料結構中儲存的內容實際上是實際資料的位址值。也就是說它的索引和實際資料是分開的,只不過使用索引指向了實際資料。這種索引的模式被稱為非聚集索引。而innodb引擎的索引的資料結構也是b+樹,只不過資料結構中儲存的都是實際的資料,這種索引有被稱為聚集索引。

memory:memory儲存引擎的出發點是速度。為得到最快的響應時間,採用的邏輯儲存介質是系統記憶體。雖然在記憶體中儲存表資料確實會提供很高的效能,但當mysqld守護程序崩潰時,所有的memory資料都會丟失。獲得速度的同時也帶來了一些缺陷。它要求儲存在memory資料表裡的資料使用的是長度不變的格式,這意味著不能使用blob和text這樣的長度可變的資料型別,varchar是一種長度可變的型別,但因為它在mysql內部當做長度固定不變的char型別,所以可以使用。

參考如下memory引擎的使用場景及特點: 

1能像會話(session)或快取(caching)一樣方便操作和管理。 

2充分發揮記憶體引擎的特點:高速度,低延遲。 

3唯讀或讀為主的訪問模式(不適合頻繁寫)。 

4但是記憶體表的效能受制於單執行緒的執行效率和寫操作時的表鎖開銷,這就限制了記憶體表高負載時的擴充套件性,特別是混合寫操作的併發處理。此外,記憶體表中的數 據在伺服器重啟後會丟失。 

blackhole:這個儲存引擎似乎看起來沒什麼用處,因為它不允許任何資料的儲存或者查詢。因此blackhole 通常被用來測試資料庫的結構、索引和擦查詢。你仍然可以使用 inserts 命令來插入,只不過所有的資料都是void

csv:從mysql4.1.4開始新增的儲存引擎,以逗號分隔的字串儲存資料。因此這個儲存引擎不適合大規模的資料儲存或者需要索引的資料表等場景。這個儲存引擎適合將資料轉成spreadsheet 檔案

archive:從mysql 4.1.3 開始新增的儲存引擎,它經常被用來儲存大規模資料(無需索引)。這個儲存引擎只支援 insert 和 select操作,而且所有的資訊都是被壓縮過的。這些特性讓archive很適合用來儲存日誌、交易記錄、賬戶等。不過需要注意的是,在讀取資料的時候,整個表都需要在資料返回之前解壓並讀取。因此這個儲存引擎最適合使用頻率較低的場景。

federated:federated儲存引擎是訪問mysql伺服器的乙個**,儘管該引擎看起來提供了乙個很好的跨伺服器的靈活性,但是經常帶來問題,預設是禁用的。

mysql資料引擎

mysql有不少資料引擎,但是常用就兩個,myisam 公尺色木 和 innodb 摘自其他文件 兩種儲存引擎的大致區別表現在 事務支援不同 innodb支援事務,myisam不支援,這一點是非常之重要。事務是一種高階的處理方式,如在一些列增刪改中只要哪個出錯還可以回滾還原,而myisam就不可以了...

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

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

mysql的資料引擎

一般來說,mysql有以下幾種引擎 isam myisam heap innodb和berkley bdb 注意 不同的版本支援的引擎是有差異的。當然啦,如果你感覺自己的確技術高超,你還能夠使用mysql 來建立自己的資料庫引擎,這個已經out of my knowledge,牛人可以參照mysql...