MySQL Show命令的用法大全

weixin_34232744發表於2017-11-12

Innodb儲存引擎 Innodb儲存引擎支援事務,其設計目標主要面向線上事務處理(OLTP)的應用。其特點是行鎖設計、支援外來鍵,並支援類似於Oracle的非鎖定讀,即預設讀操作不會產生鎖。 Innodb儲存引擎將資料放在一個邏輯的表空間中,也可以單獨放到一個獨立的ibd檔案中。

Innodb儲存引擎

Innodb儲存引擎支援事務,其設計目標主要面向線上事務處理(OLTP)的應用。其特點是行鎖設計、支援外來鍵,並支援類似於Oracle的非鎖定讀,即預設讀操作不會產生鎖。

Innodb儲存引擎將資料放在一個邏輯的表空間中,也可以單獨放到一個獨立的ibd檔案中。此外,還支援用裸裝置(row disk)來建立其表空間。

Innodb通過多版本併發控制(MVCC)來獲得高併發性,並且實現了SQL標準的4種隔離級別,預設為RR級。同時,使用一種被稱為netx-key locking的策略來避免幻讀(phantom)現象產生。除此之外,innodb還提供了插入緩衝、二次寫、自適應雜湊索引、預讀等高效能和高可用的功能。

對於表中的資料,innodb採用了聚集(clusterd)的方式,因此每張表的儲存都是按主鍵的順序進行存放。如果沒有顯式的在表中定義主鍵,innodb會為每一行生產一個6位元組的ROWID,並以此作為主鍵 select _rowid from t;

MyISAM儲存引擎

此引擎不支援事務、採用表鎖設計、支援全文索引,主要面向一些OLAP資料庫應用。

MyISAM的另一個與眾不同是它的緩衝池只快取索引檔案,而不緩衝資料檔案。

注意:myisam表,mysql資料庫只快取其索引檔案,資料檔案的快取交由作業系統本身來完成,這與其他使用LRU演算法快取資料的資料庫不同。在5.1.23版本前,其快取索引的緩衝區最大隻能設定為4GB,之後才支援大於4GB的索引緩衝區。

MyISAM儲存引擎表由MYD和MYI組成,MYD用來存放資料檔案,MYI用來存放索引檔案。可以通過myisampack壓縮和解壓資料,但壓縮後就成只讀表了。

NDB儲存引擎

NDB儲存引擎是一個叢集儲存引擎,其結構是share nothing的叢集架構,能提供更高可用性。

NDB的特點是資料全部放在記憶體中(從5.1開始,可以將非索引資料放在磁碟上),因此主鍵查詢的速度極快,並且通過新增NDB資料儲存節點可以線性的提高資料庫效能,是高可用、高效能的叢集系統

需要注意的是,NDB儲存引擎的連線操作(JOIN)實在mysql資料庫層完成的,而不是在儲存引擎層完成。這意味著,複雜的連線操作需要巨大的網路開銷,因此查詢速度很慢。

Memory儲存引擎

Memory儲存引擎(HEAP儲存引擎)將表中的資料放在記憶體中,非常適合用於儲存臨時資料的臨時表,以及資料倉儲中的緯度表。Memory儲存引擎預設使用雜湊索引,而不是B+樹索引。

儲存速度快,但是有限制,只支援表鎖,併發效能較差,並且不支援TEXT和BLOB列型別。最重要的是,儲存變長欄位(varchar)時是按照定長欄位(char)的方式進行的,因此會浪費記憶體,eBay工程師針對此問題已經給出pathc解決方案。

需要特別注意的是:Mysql資料庫使用Memory儲存引擎作為臨時表來存放查詢的中間結果集。如果中間結果集大於Memory儲存引擎表的容量設定,又或者中間結果含有TEXT或BLOB列型別欄位,則mysql資料庫會把其轉換到myisam儲存引擎表而放到磁碟中。之前提到myisam不緩衝資料檔案,因此這時產生的臨時表的效能對於查詢會有損失。

Archinve儲存引擎

Archive儲存引擎只支援insert和select操作,使用zlib演算法將資料行進行壓縮後儲存,壓縮比一般可以達到1:10。Archinve儲存引擎非常適合儲存歸檔資料,如日誌資訊。

使用行鎖來實現高併發插入操作,但其本身並不是事務安全的儲存引擎,其設計目標主要是提供高速的插入和壓縮功能。

Federated儲存引擎

Federated儲存引擎表並不存放資料,它只是指向一臺遠端mysql資料庫伺服器上的表。只支援mysql資料庫表,不支援異構資料庫表。

Maria儲存引擎

其設計目標主要是用來取代原有的Myisam儲存引擎。特點是:支援快取資料問索引檔案,應用了行鎖設計,提供了MVCC功能,支援事務和非事務安全選項,以及更好的BLOB字元型別的處理效能。

其他儲存引擎

Merge、CSV、Sphinx、Infobright等

原文連結


相關文章