mysql儲存引擎

來源:互聯網
上載者:User

標籤:spatial   片段   nes   獲得   核心   nod   緩衝池   崩潰   它的   

儲存引擎的定義

資料庫儲存引擎是資料庫底層軟體組織,資料庫管理系統(DBMS)通過儲存引擎進行建立,刪除,修改,查詢資料。不同的儲存引擎提供不同的儲存機制,索引技巧,鎖定水平等功能,使用不同的儲存引擎,還可以獲得特定的功能。

補充: mysql的核心就是儲存引擎

 

查看儲存引擎

命令show engines (我用的navicat)

 

InnoDB儲存引擎

mysql5.5之後預設的儲存引擎,是事務型資料庫的首選引擎。支援事務安全表(ACID:原子性,一致性,隔離性,持久性)

InnoDB的特性:

  1. 給mysql的表提供了交易處理,復原,崩潰恢複能力,多版本並發控制的事務安全,InnoDB鎖定在行級並且也在SELECT語句中提供一個類似oracle的非鎖定讀,這些功能增加了多使用者部署和效能
  2. InnoDB儲存引擎為在主記憶體中快取資料和索引而維持它自己的緩衝池。InnoDB將它的表和索引在一個邏輯資料表空間中,資料表空間可以包含數個檔案(或原始磁碟檔案)。這與MyISAM表不同,比如在MyISAM表中每個表被存放在分離的檔案中
  3. 支援auto_increment,支援外鍵完整性條件約束,儲存表中的資料時,每張表的儲存都按主鍵順序存放,如果沒有顯示在表定義時指定主鍵,InnoDB會為每一行產生一個6位元組的ROWID,並以此作為主鍵
  4. InnoDB裡,建立的表的表結構儲存在以.frm為尾碼的檔案中,建立的名為ibdata1的10MB大小的自動擴充資料檔案,以及兩個名為ib_logfile0和ib_logfile1的5MB大小的記錄檔,儲存在innodb_data_home_dir和innodb_data_file_path定義的資料表空間中
  5. 支援B+樹索引,自適應雜湊索引,fulltext索引(現在支援了),R-TREE索引(是一種空間索引的資料結構,用於對GIS資料類型建立SPATIAL索引,現在支援了)                                                                                                           補充: 自適應雜湊索引: InnoDB引擎會即時監控表上索引的使用方式,如果認為建立hash索引可以提高效率,則自動在記憶體中的“自適應雜湊索引緩衝區”中建立hash索引(好厲害的樣子)

總結: InnoDB的優勢在於良好的交易處理能力,崩潰恢複能力和並發控制,缺點是讀寫效率較差(不包括並發寫入),佔用的資料空間相對較大

 MyISAM儲存引擎

MyISAM是基於ISAM引擎發展起來的,具有較高的插入,查詢速度,但不支援事務

MyISAM的特性:

  1. 當把刪除和更新及插入混合的時候,動態尺寸的行更少片段
  2. 每個MyISAM表最大索引數是64,這可以通過重新編譯來改變。每個索引最大的列數是16
  3. BLOB和TEXT列可以被索引
  4. NULL被允許在索引的列中,這個值占每個鍵的0~1個位元組
  5. 所有數字索引值以高位元組為先被儲存以允許一個更高地索引壓縮
  6. 每個MyISAM類型的表都有一個AUTO_INCREMENT的內部列,當INSERT和UPDATE操作的時候該列被更新,同時AUTO_INCREMENT列將被重新整理。所以說,MyISAM類型表的AUTO_INCREMENT列更新比InnoDB類型的AUTO_INCREMENT更快(至少10%)
  7. 可以把資料檔案和索引檔案放在不同目錄
  8. VARCHAR和CHAR列可以多達64KB
  9. 基於MyISAM儲存引擎的表支援3種不同的儲存格式。包括靜態型、動態型和壓縮型。其中,靜態型是MyISAM的預設儲存格式,它的欄位是固定長度的;動態型包含變長欄位,記錄的長度不是固定的;壓縮型需要用到myisampack工具,佔用的磁碟空間較小。
  10. 使用MyISAM引擎建立資料庫,將產生3個檔案。檔案的名字以表名字開始,副檔名之處檔案類型:frm檔案儲存體表定義、資料檔案的副檔名為.MYD(MYData)、索引檔案的副檔名時.MYI(MYIndex)
  11. 支援B+樹索引(與InnoDB不同),fulltext索引,R-TREE索引

總結: MyISAM的優勢在於佔用空間小,處理速度快,缺點是不支援事務的完整性和並發性

 

Memory儲存引擎

memory儲存引擎是將表中的資料存放區到記憶體中,為查詢和引用其他表資料提供快速存取

memory的特性:

  1. 每個基於MEMORY儲存引擎的表實際對應一個磁碟檔案,該檔案的檔案名稱與表名相同,類型為frm類型,該檔案中只儲存表的結構
  2. 資料檔案,都是儲存在記憶體中,這樣有利於資料的快速處理,提高整個表的效率
  3. MEMORY不支援BLOB或TEXT列
  4. MEMORY支援AUTO_INCREMENT列對可包含NULL值的列的索引
  5. MEMORY表在所有用戶端之間共用(就像其他任何非TEMPORARY表)
  6. 當不再需要MEMORY表的內容時,要釋放被MEMORY表使用的記憶體,應該執行DELETE FROMTRUNCATE TABLE,或者刪除整個表(使用DROP TABLE
  7. MEMORY表使用一個固定的記錄長度格式
  8. 支援HASH和BTREE索引

總結: MEMORY用到的很少,因為它是把資料存到記憶體中,如果記憶體出現異常就會影響資料,如果重啟或者關機,所有資料都會消失,因此,基於MEMORY的表的生命週期很短,一般是一次性的

 

 功能  InnoDB  MyISAN  Memory  Archive
 儲存限制  64TB 256TB  RAM  none
 支援事務  YES  NO  NO  NO
 支援全文索引  YES  YES  NO  NO
 支援B樹索引  YES  YES  YES  NO
 支援雜湊索引  自適應雜湊索引  NO  YES  NO
 支援資料緩衝  YES  NO  N/A  NO
 支援外鍵  YES  NO  NO  NO

 

總結: 

如果要提供提交、復原、崩潰恢複能力的事物安全(ACID相容)能力,並要求實現並發控制,InnoDB是一個好的選擇

如果資料表主要用來插入和查詢記錄,則MyISAM引擎能提供較高的處理效率

如果只是臨時存放資料,資料量不大,並且不需要較高的資料安全性,可以選擇將資料儲存在記憶體中的Memory引擎,MySQL中使用該引擎作為暫存資料表,存放查詢的中間結果

如果只有INSERT和SELECT操作,可以選擇Archive,Archive支援高並發的插入操作,但是本身不是事務安全的。Archive非常適合儲存歸檔資料,如記錄日誌資訊可以使用Archive

使用哪一種引擎需要靈活選擇,一個資料庫中多個表可以使用不同引擎以滿足各種效能和實際需求,使用合適的儲存引擎,將會提高整個資料庫的效能

mysql儲存引擎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.