外掛程式式儲存引擎是mysql資料庫最重要的特性之一,使用者可以根據應用的需要選擇ruhr儲存和索引資料,是否使用事務等。
innodb和bdb提供事務安全表,其他儲存引擎都是非事務安全表
建立新錶時如果不指定儲存引擎,那麼系統就會使用預設儲存引擎,mysql5.5之前的預設引擎時myisam,之後是innodb(關鍵字:engine)
缺點:不支援事務,也不支援外來鍵
優點:訪問速度快,對事務的完整性沒有要求或者以select、insert為主的應用基本上都可以使用這個引擎來建立
myisam再磁碟上儲存成三個檔案,其檔名都和表名相同,但副檔名分別是:.frm(儲存表定義),.myd(儲存資料),.myi(儲存索引)
資料檔案和索引檔案可以放置在不同的目錄,平均分布io,獲得更快的速度。通過(建立表時data directory和index directory(需要時據對路徑,和訪問許可權))
myisam型別的表可能會損壞,原因可能是多種多樣,check table ,repair table。
表損壞可能導致資料庫異常重新啟動,需要盡快修復並盡可能地確認損壞的原因。
myisam表嗨支援3中不同的儲存格式:1.靜態(固定長度)表 2.動態表 3.壓縮表
靜態表是預設的儲存格式。靜態表中的字段都是非變長字段,這樣每個記錄都是固定長度,這種儲存的優點是儲存非常迅速,容易快取,出現故障容易恢復;缺點是占用的空間通常比動態表多。靜態表的資料再儲存時會按照列的寬度定義補足空格,但是在應用訪問的時候不會得到這些空格。但是需要特別注意的問題,如果需要儲存的內容後面本來就有空格,那麼在返回的時候也會被去掉。
動態表中包含變長的字段,記錄不是固定長度的。這樣優點是節省儲存空間,但是頻繁的更新和刪除記錄會產生碎片,需要定期執行optimize table 或 myisamchk-r命令來改善效能,並且在出現故障時恢復起來比較困難。
壓縮表由myisampack工具建立,佔據非常小的磁碟空間,因為每個記錄是被單獨壓縮的,所以只有非常小的訪問開支。
innodb儲存引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比myisam,處理效率差一些,並且會占用更多的磁碟空間以保留資料和索引。
1.自動增長列
如果插入的是空或者0,則實際插入的殭屍自動增長後的值。通過「alter table *** auto_increment = n」語句強制設定自動增長列的初始值,如果在使用之前重新啟動資料庫,則需要重新設定,不設定預設初始值為1.對於innodb表來說自動增長列必須是索引。如果是組合索引,也必須是組合索引的第一列,但是對於myisam表,自動增長列可以是組合索引的其他列,這樣插入記錄後,自動增長列按照組合索引前面幾列進行排序後遞增的。
2.外來鍵約束
mysql支援外來鍵的儲存引擎只有innodb,在建立外來鍵的時候,要求父表必須有對應的索引,字表在建立外來鍵的時候也會自動建立對應的索引。
當某個表被其他表建立的外來鍵參照,那麼該錶的對應索引或者主鍵禁止被刪除。
在匯入多個表的資料時,如果需要忽略表之前的匯入順序,可以暫時關閉外來鍵的檢查,在處理load data 和 alter table操作的時候,可以關閉外來鍵約束來加快處理速度,「set foreign_key_checks = 0(1開)」
對於innodb型別的表,外來鍵資訊通過使用show create table 或者 show table status命令顯示
3.儲存方式
innodb儲存表和索引有以下兩種方式。
使用共享表空間儲存,這種方式建立的表的表結構儲存在.frm檔案中,資料和索引儲存在innodb_data_home_dir和innodb_data_file_path定義的表空間中,可以是多個檔案。
使用多表空間儲存,這種方式建立的表的表結構仍然儲存在.frm檔案中,但是每個表的資料和索引單獨儲存在.ibd中。如果是分割槽表,則每個分割槽對應單獨的.ibd檔案,檔名是「表名+分割槽名」,可以在建立分割槽的時候指定每個分割槽的資料檔案的位置,一次來將表的io均勻的分布在多個磁碟上。要使用多表空間的儲存方式,需要設定引數innodb_file_per_table,並且重啟服務才能生效,對於新建的表按照多表空間的方式建立,已經有的仍然使用共享表空間儲存。多表空間的資料檔案沒有大小限制,不需要設定初始化大小,也不需要設定檔案的最大限制、擴充套件大小等引數。對於使用多表空間特性的表,可以比較方便地進行單錶備份和恢復操作,
memory儲存引擎使用存在於記憶體中的內容來建立表。每個memory表只實際對應乙個磁碟檔案,格式是.frm。memory型別的表訪問非常地快,因為它的資料是放在記憶體中的,並且預設使用hash索引,但是一旦服務關閉,表中的資料就會丟掉。伺服器需要足夠的記憶體來維持所有在同一時間使用的memory表,當不再需要memory表的內容是釋放資源。每個memory表中可以放置的資料量的大小,收到max_heap_table_size系統變數的約束,這個系統變數的初始值是16mb,通過max_rows指定表的最大行。
memory型別的儲存引擎主要用於那些內容變化不頻繁的**表,或者作為統計操作的中間結果表,便於高效地對中間結果進行分析並得到最終的統計結果。對儲存引擎為memory的表進行更新操作要謹慎,因為資料沒有寫到磁碟中,所以一定要對下次重啟服務後如何獲得這些修改後的資料。
merge儲存引擎是一組myisam表的組合,這些myisam表必須結構相同,merge表本生沒有資料結構,對merge型別可以進行查詢、更新、刪除操作,這些操作實際上是對內部的myisam表進行的
對merge型別表進行插入操作,是通過insert_method子句定義插入的表,可以有3個不同的值,first、no、last。當不定義或者為no時,不能對錶進行進行插入操作。
對merge表進行drop操作實際上只是刪除merge的定義,對內部的表沒有任何影響。
merge表在磁碟上保留兩個檔案,.frm檔案儲存表的定義,.mrg檔案包含組合表的資訊,包括merge表由哪些表組成、插入新的資料時的依據。可以通過修改.mrg檔案來修改merge表,但是修改後要通過flush tables重新整理
第三方常用的儲存引擎:列式儲存引擎infobright,高寫效能高壓縮的tokudb
特性:使用fractal樹索引保證高效的插入效能
優秀的壓縮特性,比innodb高近10倍
使用bulk loader達到快速載入大量資料
提供主從延遲消除技術
支援acid(指資料庫事務正確執行的四個基本要素的縮寫。包含:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability))和mvcc(多版本併發控制)
使用場景:
日誌資料,因為日誌通常插入頻繁且儲存量大
歷史資料,通常不會再有寫操作,可以利用tokudb的高效能壓縮特性進行儲存
在選擇儲存引擎時,應根據應用特點擊擇合適的儲存引擎。對於複雜的應用系統,還可以根據實際情況選擇多種儲存引擎進行組合。
myisam:預設的mysql外掛程式式儲存引擎(5.5之前)。如果應用是以讀操作和插入操作為主,只有少量的更新和刪除操作,並且對事務的完整性、併發性要求不是很高,那麼選擇這個儲存引擎非常合適。例如:web、資料倉儲和其他應用環境下最常用的儲存引擎之一
innodb:用於處理事務應用程式,支援外來鍵。如果應用對事務的完整性有較高的要求,在併發條件下要求資料的一致性,資料除了插入查詢之外,還包括很多的更新、刪除操作,那麼innodb儲存引擎應該是比較合適的。innodb儲存引擎除了有效的降低由於刪除和更新導致的鎖定,還可以確保事務的完整的提交和回滾,對於類似計費系統或者財務系統等對資料準確性要求比較高的系統,innodb都是合適的選擇。
memory:將所有的資料儲存在ram中,在需要快速定位記錄和其他類似資料的環境下,可提供幾塊的訪問,memory的缺陷是對錶的大小有限制,太大的表無法快取在記憶體中,其次是要確保表的資料可以恢復,資料庫異常終止後表中的資料資料是可以恢復的。memory表通常更新不太頻繁的小表,用以快速得到訪問結果。
merge:用於將一系列的myisa表以邏輯方式組合在一起,並作為乙個物件引用它們。有點突破了單個myisam表大小的限制,並且通過將不同的表分布在多個磁碟上,可以有效地改善merge表的訪問效率。這對於資料倉儲等vldb(超大型資料庫)環境十分合適。
表型別(儲存引擎)的選擇
mysql 儲存引擎概述 mysql支援多種儲存引擎,在處理不同型別的應用時,可以通過選擇使用不同的儲存引擎提高應用的效率,或者提供靈活的儲存。mysql的儲存引擎包括 myisam innodb bdb memory merge example ndb cluster archive csv bl...
MYSQL 儲存引擎(表型別)
外掛程式式儲存引擎是 mysql 資料庫最重要的特性之一,使用者可以根據應用的需要選擇如 何儲存和索引資料 是否使用事務等。mysql 預設支援多種儲存引擎,以適用於不同領域 的資料庫應用需要,使用者可以通過選擇使用不同的儲存引擎提高應用的效率,提供靈活的存 儲,使用者甚至可以按照自己的需要定製和使...
MySQL的儲存引擎(表型別)
筆記 mysql屬於資料庫管理系統,包括資料庫和用於訪問管理資料庫的介面系統。資料庫負責儲存資料,介面系統負責管理資料庫。不同使用者對資料的容量 訪問速度 資料安全性有不用需求。為了滿足使用者的不同需求,mysql採用多種儲存引擎進行資料儲存。儲存引擎指定了表的儲存型別 即如何儲存和索引資料 是否支...