原文連線:
簡單來講,儲存引擎就是指表的型別以及表在計算機上的儲存方式。資料庫
儲存引擎的概念是mysql的特色,oracle中沒有專門的儲存引擎的概念,oracle有oltp和olap模式的區分。不一樣的儲存引擎決定了mysql資料庫中的表能夠用不一樣的方式來儲存。咱們能夠根據資料的特色來選擇不一樣的儲存引擎。安全
在mysql中的儲存引擎有不少種,能夠經過「show engines」語句來檢視。下面重點關注innodb、myisam、memory這三種。伺服器
一.innodb儲存引擎 併發
innodb給mysql的表提供了事務處理、回滾、崩潰修復能力和多版本併發控制的事務安全。在mysql從3.23.34a開始包含innnodb。它是mysql上第乙個提供外來鍵約束的表引擎。並且innodb對事務處理的能力,也是其餘儲存引擎不能比擬的。靠後版本的mysql的預設儲存引擎就是innodb。工具
innodb儲存引擎總支援auto_increment。自動增加列的值不能為空,而且值必須惟一。mysql中規定自增列必須為主鍵。在插入值的時候,若是自動增加列不輸入值,則插入的值為自動增加後的值;若是輸入的值為0或空(null),則插入的值也是自動增加後的值;若是插入某個肯定的值,且該值在前面沒有出現過,就能夠直接插入。htm
innodb還支援外來鍵(foreign key)。外來鍵所在的表叫作子表,外來鍵所依賴(references)的表叫作父表。父表中被字表外來鍵關聯的字段必須為主鍵。當刪除、更新父表中的某條資訊時,子表也必須有相應的改變,這是資料庫的參照完整性規則。blog
innodb中,建立的表的表結構儲存在.frm檔案中(我以為是frame的縮寫吧)。資料和索引儲存在innodb_data_home_dir和innodb_data_file_path定義的表空間中。索引
innodb的優點在於提供了良好的事務處理、崩潰修復能力和併發控制。缺點是讀寫效率較差,占用的資料空間相對較大。生命週期
二.myisam儲存引擎
myisam是mysql中常見的儲存引擎,曾經是mysql的預設儲存引擎。myisam是基於isam引擎發展起來的,增長了許多有用的擴充套件。
myisam的表儲存成3個檔案。檔案的名字與表名相同。拓展名為frm、myd、myi。其實,frm檔案儲存表的結構;myd檔案儲存資料,是mydata的縮寫;myi檔案儲存索引,是myindex的縮寫。
基於myisam儲存引擎的表支援3種不一樣的儲存格式。包括靜態型、動態型和壓縮型。其中,靜態型是myisam的預設儲存格式,它的字段是固定長度的;動態型包含變長字段,記錄的長度不是固定的;壓縮型須要用到myisampack工具,占用的磁碟空間較小。
myisam的優點在於占用空間小,處理速度快。缺點是不支援事務的完整性和併發性。
三.memory儲存引擎
memory是mysql中一類特殊的儲存引擎。它使用儲存在記憶體中的內容來建立表,並且資料所有放在記憶體中。這些特性與前面的兩個很不一樣。
每乙個基於memory儲存引擎的表實際對應乙個磁碟檔案。該檔案的檔名與表名相同,型別為frm型別。該檔案中只儲存表的結構。而其資料檔案,都是儲存在記憶體中,這樣有利於資料的快速處理,提公升整個表的效率。值得注意的是,伺服器須要有足夠的記憶體來維持memory儲存引擎的表的使用。若是不須要了,能夠釋放記憶體,甚至刪除不須要的表。
memory預設使用雜湊索引。速度比使用b型樹索引快。固然若是你想用b型樹索引,能夠在建立索引時指定。
注意,memory用到的不多,由於它是把資料存到記憶體中,若是記憶體出現異常就會影響資料。若是重啟或者關機,全部資料都會消失。所以,基於memory的表的生命週期很短,通常是一次性的。
四.怎樣選擇儲存引擎
在實際工做中,選擇乙個合適的儲存引擎是乙個比較複雜的問題。每種儲存引擎都有本身的優缺點,不能籠統地說誰比誰好。
innodb:支援事務處理,支援外來鍵,支援崩潰修復能力和併發控制。若是須要對事務的完整性要求比較高(好比銀行),要求實現併發控制(好比售票),那選擇innodb有很大的優點。若是須要頻繁的更新、刪除操做的資料庫,也能夠選擇innodb,由於支援事務的提交(commit)和回滾(rollback)。
myisam:插入資料快,空間和記憶體使用比較低。若是表主要是用於插入新記錄和讀出記錄,那麼選擇myisam能實現處理高效率。若是應用的完整性、併發性要求比 較低,也可使用。
memory:全部的資料都在記憶體中,資料的處理速度快,可是安全性不高。若是須要很快的讀寫速度,對資料的安全性要求較低,能夠選擇memoey。它對錶的大小有要求,不能建立太大的表。因此,這類資料庫只使用在相對較小的資料庫表。
注意,同乙個資料庫也可使用多種儲存引擎的表。若是乙個表要求比較高的事務處理,能夠選擇innodb。這個資料庫中能夠將查詢要求比較高的表選擇myisam儲存。若是該資料庫須要乙個用於查詢的臨時表,能夠選擇memory儲存引擎。
mysql三種引擎 MySQL常見的三種儲存引擎
簡單來說,儲存引擎就是指表的型別以及表在計算機上的儲存方式。儲存引擎的概念是mysql的特點,oracle中沒有專門的儲存引擎的概念,oracle有oltp和olap模式的區分。不同的儲存引擎決定了mysql資料庫中的表可以用不同的方式來儲存。我們可以根據資料的特點來選擇不同的儲存引擎。在mysql...
mysql三種引擎 MySQL常見的三種儲存引擎
簡單來說,儲存引擎就是指表的型別以及表在計算機上的儲存方式。儲存引擎的概念是mysql的特點,oracle中沒有專門的儲存引擎的概念,oracle有oltp和olap模式的區分。不同的儲存引擎決定了mysql資料庫中的表可以用不同的方式來儲存。我們可以根據資料的特點來選擇不同的儲存引擎。在mysql...
MySQL三種常見儲存引擎
mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中。這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。這些不同的技術以及配套的相關功能在mysql中被稱作儲存引擎 ...