1. 程式人生 > >mysql學習與提高2:mysql儲存引擎

mysql學習與提高2:mysql儲存引擎

目錄

儲存引擎

有哪些儲存引擎

如何檢視儲存引擎

InnoDB

MyISAM

MyISAM 與InnoDB比較

總結


儲存引擎

什麼是儲存引擎呢?

儲存引擎說白了就是如何儲存資料、如何為儲存的資料建立索引和如何更新、查詢資料等技術的實現方法。

有哪些儲存引擎

有MyISAM、InnoDB、CSV、Archive、Memory、Federated等儲存引擎,因為後面四種用的較少,我們主要掌握MyISAM和InnoDB這兩種儲存引擎。

如何檢視儲存引擎

1.檢視所有引擎

show ENGINES

 

根據查詢結果我們可以看到,InnoDB是mysql預設的儲存引擎 

2.檢視當前使用的引擎

show variables like '%storage_engine%'

3.指定資料庫物件的儲存引擎

create table tb(
		id int(4) auto_increment ,
		name varchar(5),
		dept varchar(5) ,
		primary key(id)		
	)ENGINE=MyISAM AUTO_INCREMENT=1
	 DEFAULT CHARSET=utf8 

InnoDB

MySQL 5.5 及之後版本的預設儲存引擎

特性

  • InnoDB為事務性儲存引擎
  • 完全支援事物的 ACID 特性
  • Redo log (實現事務的永續性) 和 Undo log(為了實現事務的原子性,儲存未完成事務log,用於回滾)
  • InnoDB支援行級鎖
  • 行級鎖可以最大程度的支援併發
  • 行級鎖是由儲存引擎層實現的

應用場景

  • 可靠性要求比較高,或者要求事務
  • 表更新和查詢都相當的頻繁,並且行鎖定的機會比較大的情況

MyISAM

MySQL 5.5 版本之前的預設儲存引擎,在 5.0 以前最大表儲存空間最大 4G5.0 以後最大 256TB

Myisam 儲存引擎由 .myd(資料)和 .myi

(索引檔案)組成,.frm檔案儲存表結構(所以儲存引擎都有)

特性

  • 併發性和鎖級別 (對於讀寫混合的操作不好,為表級鎖,寫入和讀互斥)
  • 表損壞修復
  • Myisam 表支援的索引型別(全文索引)
  • Myisam 支援表壓縮(壓縮後,此表為只讀,不可以寫入。使用 myisampack 壓縮)

應用場景

  • 沒有事務
  • 只讀類應用(插入不頻繁,查詢非常頻繁)
  • 空間類應用(唯一支援空間函式的引擎)
  • 做很多 count 的計算

MyISAM 與InnoDB比較

  MyISAM InnoDB
儲存檔案

.frm 表定義檔案

.myd 資料檔案

.myi 索引檔案

.frm 表定義檔案

.ibd 資料檔案

表鎖 表鎖、行鎖
事務 不支援 ACID
外來鍵 不支援 支援
線上熱備份 不支援 支援
crud 大量select效能更佳 insert和update多效能更加
count操作 快取了表的總行數,直接返回 需要掃表

總結

本文主要介紹了兩種儲存引擎

InnoDB(預設) :事務優先 (適合高併發操作;行鎖),適合寫密集的表。
MyISAM :效能優先  (表鎖) ,適合讀密集的表