mysql儲存引擎使用教程 MySQL儲存引擎詳解

2021-10-18 22:13:25 字數 2197 閱讀 1405

一、mysql常用儲存引擎及特點

1、innodb儲存引擎

從mysql5.5版本之後,mysql的缺省內置儲存引擎已經是innodb了,他的主要特點有:

(1)災難恢復性比較好;

(2)支援事務。預設的事務隔離級別為可重複度,通過mvcc(併發版本控制)來實現的。

(3)使用的鎖粒度為行級鎖,可以支援更高的併發;

(4)支援外來鍵;

(6)在innodb中存在著緩衝管理,通過緩衝池,將索引和資料全部快取起來,加快查詢的速度;

(7)對於innodb型別的表,其資料的物理組織形式是聚簇表。所有的資料按照主鍵來組織。資料和索引放在一塊,都位於b+數的葉子節點上;

2、myisam儲存引擎

在5.5版本之前,myisam是mysql的預設儲存引擎,該儲存引擎併發性差,不支援事務,所以使用場景比較少,主要特點為:

(1)不支援事務;

(2)不支援外來鍵,如果強行增加外來鍵,不會提示錯誤,只是外來鍵不其作用;

(3)對資料的查詢快取只會快取索引,不會像innodb一樣快取資料,而且是利用作業系統本身的快取;

(4)預設的鎖粒度為表級鎖,所以併發度很差,加鎖快,鎖衝突較少,所以不太容易發生死鎖;

(5)支援全文索引(mysql5.6之後,innodb儲存引擎也對全文索引做了支援),但是mysql的全文索引基本不會使用,對於全文索引,現在有其他成熟的解決方案,比如:elasticsearch,solr,sphinx等。

(6)資料庫所在主機如果宕機,myisam的資料檔案容易損壞,而且難恢復;

3、memory儲存引擎

將資料存在記憶體中,和市場上的redis,memcached等思想類似,為了提高資料的訪問速度,主要特點:

(1)支援的資料型別有限制,比如:不支援text和blob型別,對於字串型別的資料,只支援固定長度的行,varchar會被自動儲存為char型別;

(2)支援的鎖粒度為表級鎖。所以,在訪問量比較大時,表級鎖會成為memory儲存引擎的瓶頸;

(3)由於資料是存放在記憶體中,所以在伺服器重啟之後,所有資料都會丟失;

(4)查詢的時候,如果有用到臨時表,而且臨時表中有blob,text型別的字段,那麼這個臨時表就會轉化為myisam型別的表,效能會急劇降低;

4、archive儲存引擎

archive儲存引擎適合的場景有限,由於其支援壓縮,故主要是用來做日誌,流水等資料的歸檔,主要特點:

(1)支援zlib壓縮,資料在插入表之前,會先被壓縮;

(2)僅支援select和insert操作,存入的資料就只能查詢,不能做修改和刪除;

(3)只支援自增鍵上的索引,不支援其他索引;

5、csv儲存引擎

資料中轉試用,主要特點:

(1)其資料格式為.csv格式的文字,可以直接編輯儲存;

(2)匯入匯出比較方便,可以將某個表中的資料直接匯出為csv,試用excel辦公軟體開啟;

二、innodb和myisam的對比

1、由於鎖粒度的不同,innodb比myisam支援更高的併發;

2、innodb為行級鎖,myisam為表級鎖,所以innodb相對於myisam來說,更容易發生死鎖,鎖衝突的概率更大,而且上鎖的開銷也更大,因為需要為每一行加鎖;

4、查詢效能上,myisam的查詢效率高於innodb,因為innodb在查詢過程中,是需要維護資料快取,而且查詢過程是先定位到行所在的資料塊,然後在從資料塊中定位到要查詢的行;而myisam可以直接定位到資料所在的記憶體位址,可以直接找到資料;

5、select count(*)語句,如果行數在千萬級別以上,myisam可以快速查出,而innodb查詢的特別慢,因為myisam將行數單獨儲存了,而innodb需要朱行去統計行數;所以如果使用innodb,而且需要查詢行數,則需要對行數進行特殊處理,如:離線查詢並快取;

6、myisam的表結構檔案包括:.frm(表結構定義),.myi(索引),.myd(資料);而innodb的表資料檔案為:.ibd和.frm(表結構定義);

三、如何選擇合適的儲存引擎

1、使用場景是否需要事務支援;

2、是否需要支援高併發,innodb的併發度遠高於myisam;

3、是否需要支援外來鍵;

5、高效緩衝資料,innodb對資料和索引都做了緩衝,而myisam只緩衝了索引;

6、索引,不同儲存引擎的索引並不太一樣;

mysql教程 如何寫MySQL儲存引擎

在mysql 5.1中開發乙個儲存引擎已經是比較方便了。所謂儲存引擎實際上是按照mysql的約定,提供某些介面的實現而已,如mysql插入一條記錄時將呼叫write row方法,通過索引檢索時將呼叫index read和index next方法等。mysql與儲存引擎之間的介面主要由兩個類 結構約定...

mysql儲存引擎 mysql儲存引擎簡介

精品推薦 什麼是儲存引擎 mysql儲存引擎是資料庫如何儲存資料 怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制 索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作...

mysql個儲存引擎 MySQL儲存引擎

mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...