mysql常用引擎6 MySQL儲存引擎詳解

2021-10-20 01:13:21 字數 2125 閱讀 5001

一、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、索引,不同儲存引擎的索引並不太一樣;

6 mysql索引 6 MySQL高階 索引

索引 1.思考 在圖書館中是如何找到一本書的?一般的應用系統對比資料庫的讀寫比例在10 1左右 即有10次查詢操作時有1次寫的操作 而且插入操作和更新操作很少出現效能問題,遇到最多 最容易出問題還是一些複雜的查詢操作,所以查詢語句的優化顯然是重中之重 2.解決辦法 當資料庫中資料量很大時,查詢資料會...

6 mysql索引 6 MySQL索引種類

1 普通索引 這是最基本的索引,它沒有任何限制,比如上文中為title欄位建立的索引就是乙個普通索引,myiasm中預設的btree型別的索引,也是我們大多數情況下用到的索引。直接建立索引 create index index name on table name column length 修改表...

6 mysql索引 Mysql索引詳解

索引 儲存引擎用於快速找到記錄的一種資料結構。索引型別 索引有很多種型別,如 b tree索引 雜湊索引 空間資料索引r tree 全文索引 主鍵索引等,在mysql 中,索引是在儲存引擎層而不是伺服器層實現的。所以沒有統一的索引標準 不同儲存引擎的索引工作方式並 不一樣,也不是所有儲存引擎都支援所...