數據庫的存儲引擎

數據庫的存儲引擎

什麼是存儲引擎?

  • 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 
# 爲何要用這個存儲引擎:
    # 支持事務 支持外鍵 支持行級鎖
#事務,考慮之後的支付功能的擴展      #行級鎖,可以更好的處理併發的修改問題
相關文章
相關標籤/搜索