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

2021-10-18 11:24:12 字數 3340 閱讀 9819

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

mysql資料庫引擎類別

你能用的資料庫引擎取決於mysql在安裝的時候是如何被編譯的。要新增乙個新的引擎,就必須重新編譯mysql。在預設情況下,mysql支援三個引擎:isam、myisam和heap。另外兩種型別innodb和berkley(bdb),也常常可以使用。

isam

isam是乙個定義明確且歷經時間考驗的資料**管理方法,它在設計之時就考慮到資料庫被查詢的次數要遠大於更新的次數。因此,isam執行讀取操作的速度很快,而且不占用大量的記憶體和儲存資源。isam的兩個主要不足之處在於,它不支援事務處理,也不能夠容錯:如果你的硬碟崩潰了,那麼資料檔案就無法恢復了。如果你正在把isam用在關鍵任務應用程式裡,那就必須經常備份你所有的實時資料,通過其複製特性,mysql能夠支援這樣的備份應用程式。

myisam

myisam是mysql的isam擴充套件格式和預設的資料庫引擎。除了提供isam裡所沒有的索引和字段管理的功能,myisam還使用一種**鎖定的機制,來優化多個併發的讀寫操作。其代價是你需要經常執行optimize table命令,來恢復被更新機制所浪費的空間。myisam還有一些有用的擴充套件,例如用來修復資料庫檔案的myisamchk工具和用來恢復浪費空間的myisampack工具。

myisam強調了快速讀取操作,這可能就是為什麼mysql受到了web開發如此青睞的主要原因:在web開發中你所進行的大量資料操作都是讀取操作。所以,大多數虛擬主機提供商和internet平台提供商只允許使用myisam格式。

myiasm是mysql預設的引擎,但是它沒有提供對資料庫事務的支援,也不支援行級鎖和外來鍵,因此當insert(插入)或update(更新)資料時即寫操作需要鎖定整個表,效率便會低一些。不過和innodb不同,myiasm中儲存了表的行數,於是select count(*) from table時只需要直接讀取已經儲存好的值而不需要進行全表掃瞄。如果表的讀操作遠遠多於寫操作且不需要資料庫事務的支援,那麼myiasm也是很好的選擇。

heap

heap允許只駐留在記憶體裡的臨時**。駐留在記憶體裡讓heap要比isam和myisam都快,但是它所管理的資料是不穩定的,而且如果在關機之前沒有進行儲存,那麼所有的資料都會丟失。在資料行被刪除的時候,heap也不會浪費大量的空間。heap**在你需要使用select表示式來選擇和操控資料的時候非常有用。要記住,在用完**之後就刪除**。

innodb和berkleydb

innodb和berkleydb(bdb)資料庫引擎都是造就mysql靈活性的技術的直接產品,這項技術就是mysql++ api。在使用mysql的時候,你所面對的每乙個挑戰幾乎都源於isam和myisam資料庫引擎不支援事務處理也不支援外來鍵。儘管要比isam和myisam引擎慢很多,但是innodb和bdb包括了對事務處理和外來鍵的支援,這兩點都是前兩個引擎所沒有的。如前所述,如果你的設計需要這些特性中的一者或者兩者,那你就要被迫使用後兩個引擎中的乙個了。

innodb引擎提供了對資料庫acid事務的支援,並且實現了sql標準的四種隔離級別。該引擎還提供了行級鎖和外來鍵約束,它的設計目標是處理大容量資料庫系統,它本身其實就是基於mysql後台的完整資料庫系統,mysql執行時innodb會在記憶體中建立緩衝池,用於緩衝資料和索引。但是該引擎不支援fulltext型別的索引,而且它沒有儲存表的行數,當select count(*) from table時需要掃瞄全表。當需要使用資料庫事務時,該引擎當然是首選。由於鎖的粒度更小,寫操作不會鎖定全表,所以在併發較高時,使用innodb引擎會提公升效率。但是使用行級鎖也不是絕對的,如果在執行乙個sql語句時mysql不能確定要掃瞄的範圍,innodb表同樣會鎖全表。

引擎的選擇

大尺寸的資料集趨向於選擇innodb引擎,因為它支援事務處理和故障恢復。資料庫的大小決定了故障恢復的時間長短,innodb可以利用事務日誌進行資料恢復,這會比較快。主鍵查詢在innodb引擎下也會相當快,不過需要注意的是如果主鍵太長也會導致效能問題,關於這個問題我會在下文中講到。大批的insert語句(在每個insert語句中寫入多行,批量插入)在myisam下會快一些,但是update語句在innodb下則會更快一些,尤其是在併發量大的時候。

myisam 和 innodb 的區別

雖然mysql裡的儲存引擎不只是myisam與innodb這兩個,但常用的就是兩個。

兩種儲存引擎的大致區別表現在:

1、(事務支援不同)innodb支援事務,myisam不支援,這一點是非常之重要。事務是一種高階的處理方式,如在一些列增刪改中只要哪個出錯還可以回滾還原,而myisam就不可以了。

2、myisam適合查詢以及插入為主的應用,innodb適合頻繁修改以及涉及到安全性較高的應用。

3、innodb支援外來鍵,myisam不支援。

4、從mysql5.5.5以後,innodb是預設引擎。

5、innodb不支援fulltext型別的索引。

6、innodb中不儲存表的行數,如select count(*) from table時,innodb需要掃瞄一遍整個表來計算有多少行,但是myisam只要簡單的讀出儲存好的行數即可。注意的是,當count(*)語句包含where條件時myisam也需要掃瞄整個表。

7、對於自增長的字段,innodb中必須包含只有該字段的索引,但是在myisam表中可以和其他字段一起建立聯合索引。

8、清空整個表時,innodb是一行一行的刪除,效率非常慢。myisam則會重建表。

9、(鎖粒度)innodb支援行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like '%lee%'),myisam表鎖。

10、(儲存空間)innodb既快取索引檔案,又快取資料檔案,myisam 只能快取索引檔案。

關於myisam與innodb選擇使用

myisam和innodb是mysql資料庫提供的兩種儲存引擎。兩者的優劣可謂是各有千秋。innodb會支援一些關聯式資料庫的高階功能,如事務功能和行級鎖,myisam不支援。myisam的效能更優,占用的儲存空間少。所以,選擇何種儲存引擎,視具體應用而定:

但要注意,innodb的行級鎖是有條件的。在where條件沒有使用主鍵時,照樣會鎖全表。比如delete from mytable這樣的刪除語句。

myisam索引和資料是分開的,而且其索引是壓縮的,可以更好地利用記憶體。所以它的查詢效能明顯優於innodb。壓縮後的索引也能節約一些磁碟空間。myisam擁有全文索引的功能,這可以極大地優化like查詢的效率。

現在一般都是選用innodb了,主要是myisam的全表鎖,讀寫序列問題,併發效率鎖表,效率低myisam對於讀寫密集型應用一般是不會去選用的。

MySQL資料庫引擎

如果你是個賽車手並且按一下按鈕就能夠立即更換引擎而不需要把車開到車庫裡去換,那會是怎麼感覺呢?mysql資料庫為開發人員所做的就好像是按按鈕換引擎 它讓你選擇資料庫引擎,並給你一條簡單的途徑來切換它。mysql的自帶引擎肯定是夠用了,但是在有些情況下,其他的引擎可能要比手頭所用更適合完成任務。如果願...

mysql資料庫引擎

mysql資料庫引擎 資料庫引擎是在我們編譯安裝mysql的時候確定下來的。也就是說如果我們想換乙個資料庫引擎,也就要重新編譯mysql。我們也可以使用mysql和api來編譯我們自己的資料庫引擎,當然這個是建立在你對資料庫底層非常了解的地步。所以我們想要新增乙個新的資料庫引擎的時候,那麼就編譯吧。...

mysql資料庫引擎

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