在 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介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...