MySQL 的儲存引擎

2021-09-19 16:14:53 字數 2216 閱讀 6958

在 mysql 中有兩個儲存引擎 myisam 和 innodb,每個引擎都有利有弊。酷殼以前文章《mysql: innodb 還是 myisam?》討論和這個事情。 

myisam 適合於一些需要大量查詢的應用,但其對於有大量寫操作並不是很好。甚至你只是需要update乙個字段,整個表都會被鎖起來,而別的程序,就算是讀程序都無法操作直到讀操作完成。另外,myisam 對於 select count(*) 這類的計算是超快無比的。 

innodb 的趨勢會是乙個非常複雜的儲存引擎,對於一些小的應用,它會比 myisam 還慢。但是它支援「行鎖」 ,於是在寫操作比較多的時候,會更優秀。並且,他還支援更多的高階應用,比如:事務。 

下面是mysql的手冊 

* target=」_blank」myisam storage engine 

* innodb storage engine 

1.innodb支援事物,而myisam不支援事物

2.innodb支援行級鎖,而myisam支援表級鎖

3.innodb支援mvcc, 而myisam不支援

4.innodb支援外來鍵,而myisam不支援

5.innodb不支援全文索引,而myisam支援。

6.innodb不能通過直接拷貝表檔案的方法拷貝表到另外一台機器, myisam 支援

7.innodb表支援多種行格式, myisam 不支援

8.innodb是索引組織表, myisam 是堆表

1.插入緩衝(insert buffer)

2.二次寫(double write)

3.自適應雜湊索引(ahi)

4.預讀(read ahead)

mysql5.6下 innodb 引擎的主要改進:

( 1) online ddl

( 2) memcached nosql 介面

( 3) transportable tablespace( alter table discard/import tablespace)

( 4) mysql 正常關閉時,可以 dump 出 buffer pool 的( space, page_no),重啟時 reload,加快預熱速度

( 5) 索引和表的統計資訊持久化到 mysql.innodb_table_stats 和mysql.innodb_index_stats,可提供穩定的執行計畫

( 6) compressed row format 支援壓縮表

mysql5.7innodb 引擎主要改進

myisam更快,因為myisam內部維護了乙個計數器,可以直接調取。

都是 b+樹索引, innodb 是索引組織表, myisam 是堆表, 索引組織表和堆表的區別要熟悉

答:innodb是基於索引來完成行鎖

例: select * from tab_with_index where id = 1 for update;

for update 可以根據條件來完成行鎖鎖定,並且 id 是有索引鍵的列,

如果 id 不是索引鍵那麼innodb將完成表鎖,,併發將無從談起

(1)、有多少種日誌

redo和undo

(2)、日誌的存放形式

redo:在頁修改的時候,先寫到 redo log buffer 裡面, 然後寫到 redo log 的檔案系統快取裡面(fwrite),然後再同步到磁碟檔案( fsync)。

undo:在 mysql5.5 之前, undo 只能存放在 ibdata*檔案裡面, 5.6 之後,可以通過設定 innodb_undo_tablespaces 引數把 undo log 存放在 ibdata*之外。

(3)、事務是如何通過日誌來實現的,說得越深入越好

基本流程如下:

因為事務在修改頁時,要先記 undo,在記 undo 之前要記 undo 的 redo, 然後修改資料頁,再記資料頁修改的 redo。 redo(裡面包括 undo 的修改) 一定要比資料頁先持久化到磁碟。 當事務需要回滾時,因為有 undo,可以把資料頁回滾到前映象的

狀態,崩潰恢復時,如果 redo log 中事務沒有對應的 commit 記錄,那麼需要用 undo把該事務的修改回滾到事務開始之前。 如果有 commit 記錄,就用 redo 前滾到該事務完成時並提交掉。

mysql的儲存引擎有 mysql儲存引擎有哪些?

儲存引擎是資料庫管理系統用來從資料庫建立 讀取和更新資料的軟體模組。mysql中有兩種型別的儲存引擎 事務型和非事務型。對於mysql 5.5及更高版本,預設的儲存引擎是innodb。在5.5版本之前,mysql的預設儲存引擎是myisam。那麼mysql儲存引擎有哪些?一 innodb 這是mys...

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

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

mysql個儲存引擎 MySQL儲存引擎

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