(資料庫十一)MySQL 儲存引擎及其鎖機制

2021-10-10 11:14:28 字數 1924 閱讀 3628

常用的儲存引擎如下:

(1) innodb 引擎:innodb 引擎提供了對資料庫 acid 事務的支援,並且還提供了行級鎖和外來鍵的約束,它的設計目標就是處理大資料容量的資料庫系統。mysql 5.7.15版本預設使用的是 innodb 版本

(2) myiasm引擎(原本mysql的預設引擎):不提供事務的支援,也不支援行級鎖和外來鍵。

(3) memory引擎:所有的資料都在記憶體中,資料的處理速度快,但是安全性不高。

同乙個資料庫也可以使用多種儲存引擎的表。如果乙個表修改要求比較高的事務處理,可以選擇 innodb。這個資料庫中可以將查詢要求比較高的表選擇myisam儲存。如果該資料庫需要乙個用於查詢的臨時表,可以選擇memory儲存引擎。

myiasm引擎:b+樹的資料結構中儲存的內容是實際資料的位址值。也就是說它的索引和實際資料是分開的,只不過使用索引指向了實際資料。這種索引的模式被稱為非聚集索引

innodb引擎:其索引的資料結構也是b+樹,只不過資料結構中儲存的都是實際的資料,這種索引又被稱為聚集索引

myisam 和 memory 採用表級鎖(table-level locking)

bdb採用頁面鎖(page-level locking)或表級鎖,預設為頁面鎖

innodb支援行級鎖(row-level locking)和表級鎖,預設為行級鎖

innodb中的行鎖與表鎖:

innodb行鎖是通過給索引上的索引項加鎖來實現的,這一點mysql與oracle不同,後者是通過在資料塊中對相應資料行加鎖來實現的。innodb這種行鎖實現特點意味著:只有通過索引條件檢索資料,innodb才使用行級鎖,否則,innodb將使用表鎖

在實際應用中,要特別注意 innodb 行鎖的這一特性,不然的話可能導致大量的鎖衝突,從而影響併發效能。

1、在不通過索引條件查詢的時候,innodb 確實使用的是表鎖,而不是行鎖。

2、由於 mysql 的行鎖是針對索引加的鎖,不是針對記錄加的鎖,所以雖然是訪問不同行的記錄,但是如果是使用相同的索引鍵,是會出現鎖衝突的。應用設計的時候要注意這一點。

3、當表有多個索引的時候,不同的事務可以使用不同的索引鎖定不同的行,另外,不論是使用主鍵索引、唯一索引或普通索引,innodb 都會使用行鎖來對資料加鎖。

4、即便在條件中使用了索引字段,但是否使用索引來檢索資料是由 mysql 通過判斷不同 執行計畫的代價來決定的。如果 mysql 認為全表掃效率更高。比如對一些很小的表。它就不會使用索引。這種情況下 innodb 將使用表鎖。而不是行鎖。因此,在分析鎖衝突時, 別忘了檢查 sql 的執行計畫。以確認是否真正使用了索引。

innodb 和 myisam 的區別

innodb,最為通用/推薦的一種引擎,支援事務、行級鎖、甚至間隙鎖(避免幻讀)、支援熱備份,mvcc,在併發上佔優勢,系統資源占用多。

myisam,不支援事務和行級鎖,只支援表鎖,某些場景效能很好:占用儲存上優,查詢速度上完勝(大概是innodb的3倍)系統資源占用少。

innodb支援事務, myisam不支援;

innodb支援行級鎖、表鎖;myisam只支援表鎖;

innodb支援mvcc,myisam不支援;

innodb不支援全文索引,myisam支援;

innodb支援外來鍵,myisam不支援外來鍵;

innodb和myisam都支援b+樹索引,innodb還支援自適應雜湊索引

myisam實現了字首壓縮技術,占用儲存空間更小(但會影響查詢),innodb是原始資料儲存,占用儲存更大。

ps:大部分情況下,innodb都是正確的選擇。—《高效能mysql》

Mysql資料庫儲存引擎

儲存引擎是什麼?mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中。這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。例如,如果你在研究大量的臨時資料,你也許需要使...

資料庫 mysql儲存引擎

mysql常用的四種引擎的介紹 1 myisam儲存引擎 不支援事務 也不支援外來鍵,優勢是訪問速度快,對事務完整性沒有要求或者以select,insert為主的應用基本上可以用這個引擎來建立表,適合寫多的情況。frm儲存當前資料表的結構,myd儲存當前表的資料,myi儲存當前資料表的索引 支援表級...

mysql資料庫儲存引擎

我們在 mysql儲存引擎有哪些 一節中介紹了 mysql 中幾種主要的儲存引擎以及它們的使用特性,本節將介紹如何根據不同的應用場景去選擇合適的儲存引擎。在使用 mysql 資料庫管理系統時,選擇乙個合適的儲存引擎是乙個非常複雜的問題。不同的儲存引擎都有各自的特性 優勢和使用的場合,正確的選擇儲存引...