[TOC] 資料庫的存儲引擎 什麼是存儲引擎? MySQL中的數據用各種不同的技術存儲在文件(或者記憶體)中。這些技術中的每一種技術都使用不同的存儲機制、 索引技巧、鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能, 從而改善你的應用的整體功能。在MySQL ...
目錄
資料庫的存儲引擎
什麼是存儲引擎?
- MySQL中的數據用各種不同的技術存儲在文件(或者記憶體)中。這些技術中的每一種技術都使用不同的存儲機制、
索引技巧、鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,
從而改善你的應用的整體功能。在MySQL中存儲引擎(也稱作表類型)。
mysql支持哪些存儲引擎?
mysql5.6支持的存儲引擎包括 InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、
ARCHIVE、PERFORMANCE_SCHEMA。其中NDB和InnoDB提供事務安全表,其他存儲引擎都是非事務安全表。
各種存儲引擎的特性
併發性:某些應用程式比其他應用程式具有很多的顆粒級鎖定要求(如行級鎖定)。
事務支持:並非所有的應用程式都需要事務,但對的確需要事務的應用程式來說,有著定義良好的需求,如ACID相容等。
引用完整性:通過DDL定義的外鍵,伺服器需要強制保持關聯資料庫的引用完整性。
物理存儲:它包括各種各樣的事項,從表和索引的總的頁大小,到存儲數據所需的格式,到物理磁碟。
索引支持:不同的應用程式傾向於採用不同的索引策略,每種存儲引擎通常有自己的編製索引方法,
但某些索引方法(如B-tree索引)對幾乎所有的存儲引擎來說是共同的。
記憶體高速緩衝:與其他應用程式相比,不同的應用程式對某些記憶體高速緩衝策略的響應更好,因此,
儘管某些記憶體高速緩衝對所有存儲引擎來說是共同的(如用於用戶連接的高速緩衝,MySQL的高速查詢高速緩衝等),
其他高速緩衝策略僅當使用特殊的存儲引擎時才唯一定義。
性能幫助:包括針對並行操作的多I/O線程,線程併發性,資料庫檢查點,成批插入處理等。
其他目標特性:可能包括對地理空間操作的支持,對特定數據處理操作的安全限制等。
常用存儲引擎及適用場景
InnoDB
用於事務處理應用程式,支持外鍵和行級鎖。如果應用對事物的完整性有比較高的要求,在併發條件下要求數據的一致性,
數據操作除了插入和查詢之外,還包括很多更新和刪除操作,那麼InnoDB存儲引擎是比較合適的。
InnoDB除了有效的降低由刪除和更新導致的鎖定,還可以確保事務的完整提交和回滾,
對於類似計費系統或者財務系統等對數據準確要求性比較高的系統都是合適的選擇。
#InnoDB 5.6以上 預設存儲方式
# 存儲的文件個數:表結構、表中的數據
# 支持行級鎖、支持表鎖 ,修改數據多,#行級鎖效率很低
# 支持事務 #開啟事務不能再分,執行不成功回滾
# 支持外鍵 #外鍵 主要做數據關聯 由於外鍵的約束,刪除的時候要先刪除關聯
MyI SAM
如果應用是以讀操作和插入操作為主,只有很少的更新和刪除操作,並且對事務的完整性、併發性要求不高,那麼可以選擇這個存儲引擎。
#MyI SAM 5.5以下 預設存儲方式
# 存儲的文件個數:表結構、表中的數據、索引
# 支持表級鎖
# 不支持行級鎖 不支持事務 不支持外鍵
Memory ['mɛməri]
將所有的數據保存在記憶體中,在需要快速定位記錄和其他類似數據的環境下,可以提供極快的訪問。
Memory的缺陷是對錶的大小有限制,雖然資料庫因為異常終止的話數據可以正常恢復,但是一旦資料庫關閉,存儲在記憶體中的數據都會丟失。
# MEMORY 記憶體
# 存儲的文件個數:表結構
# 優勢 :增刪改查都很快
# 劣勢 :重啟數據消失、容量有限
# 用的不多 有別的替代品
ARCHIVE引擎 (瞭解)
擁有很好的壓縮機制,它使用zlib壓縮庫,在記錄被請求時會實時壓縮。
支持最基本的插入和查詢兩種功能。在MySQL 5.5開始支持索引。
不支持事務。支持行級鎖和專用的緩存區,所以可以實現高併發的插入。
適合存儲大量日誌、歷史數據。
BLACKHOLE引擎 (瞭解)
接受但不存儲數據,但是如果MySQL啟用了二進位日誌,SQL語句被寫入日誌(並被覆制到從伺服器)。
用於做日誌記錄或同步歸檔的中繼存儲。但這種應用方式會碰到很多問題,因此並不推薦。
支持事務,而且支持mvcc的行級鎖。
CSV引擎 (瞭解)
每個表會生成一個.CSV文件,將CSV類型的文件當做表進行處理。
把數據以逗號分隔的格式存儲在文本文件中,這種文件是一種普通文本文件,每個數據行占用一個文本行。
不支持索引,即使用該種類型的表沒有主鍵列,也不允許表中的欄位為null。
查詢當前資料庫支持的存儲引擎: mysql> show engines \G; #(\G格式化的意思)
查看當前的預設存儲引擎: show variables like '%engine%'; #(%代表其他內容)
創建表並且指定引擎: create table t3 (id int,name char(4)) engine=memory; #(engine = "指定引擎")
在配置文件中指定: default-storage-engine=INNODB #my.ini文件下的[mysqld]
表欄位
面試題
#你們上家公司用什麼資料庫 : mysql
# 哪個版本是什麼 :5.6.2.1
# 都用這個版本麽 :不是都用這個版本 或 有部分用的不是這個版本
# 存儲引擎 :innodb
# 為什麼要用這個存儲引擎:
# 支持事務 支持外鍵 支持行級鎖
#事務,考慮以後的支付功能的擴展 #行級鎖,能夠更好的處理併發的修改問題