資料庫儲存引擎是資料庫底層軟體組織,資料庫管理系統(dbms)使用資料引擎進行建立、查詢、更新和刪除資料。不同的儲存引擎提供不同的儲存機制、索引技巧、鎖定水平等功能,使用不同的儲存引擎,還可以 獲得特定的功能。現在許多不同的資料庫管理系統都支援多種不同的資料引擎。mysql的核心就是儲存引擎。
show engines # 命令來檢視mysql提供的引擎
show variables like
'storage_engine'
;# 檢視資料庫預設使用哪個引擎
innodb儲存引擎
innodb是事務型資料庫的首選引擎,支援事務安全表(acid),支援行鎖定和外來鍵,innodb是預設的mysql引擎。innodb主要特性有:
innodb給mysql提供了具有提交、回滾和崩潰恢復能力的事物安全(acid相容)儲存引擎。
innodb鎖定在行級並且也在select語句中提供乙個類似oracle的非鎖定讀。這些功能增加了多使用者部署和效能。在sql查詢中,可以自由地將innodb型別的表和其他mysql的表型別混合起來,甚至在同乙個查詢中也可以混合
innodb是為處理巨大資料量的最大效能設計。它的cpu效率可能是任何其他基於磁碟的關係型資料庫引擎鎖不能匹敵的
innodb儲存引擎完全與mysql伺服器整合,innodb儲存引擎為在主記憶體中快取資料和索引而維持它自己的緩衝池。innodb將它的表和索引在乙個邏輯表空間中,表空間可以包含數個檔案(或原始磁碟檔案)。這與myisam表不同,比如在myisam表中每個表被存放在分離的檔案中。innodb表可以是任何尺寸,即使在檔案尺寸被限制為2gb的作業系統上
innodb支援外來鍵完整性約束
儲存表中的資料時,每張表的儲存都按主鍵順序存放,如果沒有顯示在表定義時指定主鍵,innodb會為每一行生成乙個6位元組的rowid,並以此作為主鍵
innodb被用在眾多需要高效能的大型資料庫站點上
innodb不建立目錄,使用innodb時,mysql將在mysql資料目錄下建立乙個名為ibdata1的10mb大小的自動擴充套件資料檔案,以及兩個名為ib_logfile0和ib_logfile1的5mb大小的日誌檔案
myisam儲存引擎
myisam基於isam儲存引擎,並對其進行擴充套件。它是在web、資料倉儲和其他應用環境下最常使用的儲存引擎之一。myisam擁有較高的插入、查詢速度,但不支援事物。myisam主要特性有:
大檔案(達到63位檔案長度)在支援大檔案的檔案系統和作業系統上被支援;
當把刪除和更新及插入操作混合使用的時候,動態尺寸的行產生更少碎片。這要通過合併相鄰被刪除的塊,以及若下乙個塊被刪除,就擴充套件到下一塊自動完成;
每個myisam表最大索引數是64,這可以通過重新編譯來改變。每個索引最大的列數是16;
最大的鍵長度是1000位元組,這也可以通過編譯來改變,對於鍵長度超過250位元組的情況,乙個超過1024位元組的鍵將被用上;
blob和text列可以被索引;
null被允許在索引的列中,這個值佔每個鍵的0~1個位元組;
所有數字鍵值以高位元組優先被儲存以允許乙個更高的索引壓縮;
每個myisam型別的表都有乙個auto_increment的內部列,當insert和update操作的時候該列被更新,同時auto_increment列將被重新整理。所以說,myisam型別表的auto_increment列更新比innodb型別的auto_increment更快;
可以把資料檔案和索引檔案放在不同目錄;
每個字元列可以有不同的字符集;
有varchar的表可以固定或動態記錄長度;
varchar和char列可以多達64kb
使用myisam引擎建立資料庫,將產生3個檔案。檔案的名字以表名字開始,副檔名之處檔案型別:frm檔案儲存表定義、資料檔案的擴充套件名為.myd(mydata)、索引檔案的副檔名時.myi(myindex).
memory儲存引擎
memory儲存引擎將表中的資料儲存到記憶體中,未查詢和引用其他表資料提供快速訪問。memory主要特性有:
memory表的每個表可以有多達32個索引,每個索引16列,以及500位元組的最大鍵長度;
mory儲存引擎執行hash和btree縮影;
可以在乙個memory表中有非唯一鍵值;
memory表使用乙個固定的記錄長度格式;
memory不支援blob或text列;
memory支援auto_increment列和對可包含null值的列的索引;
memory表在所由客戶端之間共享(就像其他任何非temporary表);
memory表記憶體被儲存在記憶體中,記憶體是memory表和伺服器在查詢處理時的空閒中,建立的內部表共享;
當不再需要memory表的內容時,要釋放被memory表使用的記憶體,應該執行delete from或truncate table,或者刪除整個表(使用drop table)
儲存引擎的選擇
不同的儲存引擎都有各自的特點,以適應不同的需求,如下表所示:
[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-kdwupxwm-1574686294267)(imags/mysql%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e.png)]
如果要提供提交、回滾、崩潰恢復能力的事務安全(acid相容)能力,並要求實現併發控制,innodb是乙個好的選擇;
如果資料表主要用來插入和查詢記錄,則myisam引擎能提供較高的處理效率;
如果只是臨時存放資料,資料量不大,並且不需要較高的資料安全性,可以選擇將資料儲存在記憶體中的memory引擎,mysql中使用該引擎作為臨時表,存放查詢的中間結果;
如果只有insert和select操作,可以選擇archive,archive支援高併發的插入操作,但是本身不是事務安全的。archive非常適合儲存歸檔資料,如記錄日誌資訊可以使用archive;
使用哪一種引擎需要靈活選擇,乙個資料庫中多個表可以使用不同引擎以滿足各種效能和實際需求,使用合適的儲存引擎,將會提高整個資料庫的效能。
mysql資料庫引擎 mysql資料庫引擎
資料庫引擎是用於儲存 處理和保護資料的核心服務。利用資料庫引擎可控制訪問許可權並快速處理事務,從而滿足企業內大多數需要處理大量資料的應用程式的要求。使用資料庫引擎建立用於聯機事務處理或聯機分析處理資料的關聯式資料庫。這包括建立用於儲存資料的表和用於檢視 管理和保護資料安全的資料庫物件 如索引 檢視和...
MySQL資料庫引擎
如果你是個賽車手並且按一下按鈕就能夠立即更換引擎而不需要把車開到車庫裡去換,那會是怎麼感覺呢?mysql資料庫為開發人員所做的就好像是按按鈕換引擎 它讓你選擇資料庫引擎,並給你一條簡單的途徑來切換它。mysql的自帶引擎肯定是夠用了,但是在有些情況下,其他的引擎可能要比手頭所用更適合完成任務。如果願...
mysql資料庫引擎
mysql資料庫引擎 資料庫引擎是在我們編譯安裝mysql的時候確定下來的。也就是說如果我們想換乙個資料庫引擎,也就要重新編譯mysql。我們也可以使用mysql和api來編譯我們自己的資料庫引擎,當然這個是建立在你對資料庫底層非常了解的地步。所以我們想要新增乙個新的資料庫引擎的時候,那麼就編譯吧。...