數據庫的存儲引擎


數據庫的存儲引擎

什么是存儲引擎?

  • 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 
# 為什么要用這個存儲引擎:
    # 支持事務 支持外鍵 支持行級鎖
#事務,考慮以后的支付功能的擴展      #行級鎖,能夠更好的處理並發的修改問題
作 者: 郭楷豐
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角 推薦一下。您的鼓勵是博主的最大動力!
自 勉:生活,需要追求;夢想,需要堅持;生命,需要珍惜;但人生的路上,更需要堅強。 帶着感恩的心啟程,學會愛,愛父母,愛自己,愛朋友,愛他人。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM