5.6版本之前默認是MyISam存儲引擎,5.6版本以後默認支持的Innodb存儲引擎,這兩種也是最經常使用的.html
存儲引擎層mysql
存儲引擎表由MYD和MYI組成sql
特性(只讀還能夠接受)shell
併發性和鎖級別(表級鎖)數據庫
表損壞修復,不支持事務緩存
check table tablename 檢查表 repqir table tablename 恢復表
# 經過engine指定存儲引擎 create table myIsam(id int,c1 varchar(10))engine=myisam;
MyISam表支持的索引類型服務器
MyISAM表支持數據壓縮併發
# 命令行: myisampack
適用場景:spa
http://www.javashuo.com/article/p-pjimmmvh-cc.html命令行
判斷獨立表空間和共享表空間的方法
一、在配置文件my.cnf裏面設置innodb_file_per_table=0,重啓MySQL服務,建立表common_tablespace,你會在數據目錄看到只有common_tablespace.frm文件。
若是表的存儲引擎是InnoDB,並且表空間(tablespace)是共享表空間的話,那麼數據庫對應目錄下面是沒有"表名.ibd"文件的。獨立表空間的表的話,則有"表名.ibd"文件。只是這個方法很笨,對於生產環境,大量的表經過這種方式判別,確實不是一個好方法。
二、MySQL 5.6 INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES 關於這個系統表提供了有關表格的格式和存儲特性,包括行格式,壓縮頁面大小位級別的信息(如適用),INNODB的表空間信息。
# 共享表空間 SELECT TABLE_SCHEMA ,TABLE_NAME ,TABLE_TYPE ,N'共享表空間' AS TABLE_SPACE ,ENGINE ,VERSION ,TABLE_ROWS ,AVG_ROW_LENGTH ,CREATE_TIME ,UPDATE_TIME FROM INFORMATION_SCHEMA.TABLES T LEFT JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME WHERE I.NAME IS NULL AND T.TABLE_SCHEMA='MyDB' AND T.ENGINE='InnoDB'; #獨立表空間 SELECT TABLE_SCHEMA ,TABLE_NAME ,TABLE_TYPE ,N'獨立表空間' AS TABLE_SPACE ,ENGINE ,VERSION ,TABLE_ROWS ,AVG_ROW_LENGTH ,CREATE_TIME ,UPDATE_TIME FROM INFORMATION_SCHEMA.TABLES T INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME WHERE T.TABLE_SCHEMA='MyDB' AND T.ENGINE='InnoDB';
三、若是是MySQL 5.7的話, 比MySQL 5.6有多了一種方法,MySQL 5.7 的INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES中多了SPACE_TYPE字段,不過其值所有爲Single,而INFORMATION_SCHEMA.INNODB_SYS_TABLES中也多了字段SPACE_TYPE, 其值有Single與System 分別表示單獨表空間和共享表空間。
#獨立表空間 SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE SPACE_TYPE='Single'; #共享表空間 SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE SPACE_TYPE='System';
四、若是是MySLQ 8.0的話,還多了一種方法, 那就是經過INFORMATION_SCHEMA.INNODB_TABLES來判斷,這個新增的系統表能夠經過SPACE_TYPE字段來區分共享表空間與獨立表空間
SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE SPACE_TYPE=’Single’;
使用表空間進行數據存儲
innodb_file_per_table ON: 獨立表空間: tablename. ibd OFF: 系統表空間:ibdataX
系統表空間和獨立表空間要如何選擇
比較:
錶轉移的步驟:
Innodb存儲引擎的特性
什麼是鎖
打個比方: 郵件系統,當兩個用戶向同一地址發送郵件時,這時候只會有一個用戶發送成功,另一個會暫時阻塞,這就是鎖也就是事務特性中的隔離性,避免了損壞數據。
鎖的類型
鎖的粒度
相互之間不存在阻塞,鎖的單元越小支持併發越高,好比innodb支持行級鎖,這樣當須要寫入數據時只會對單行操做而不影響其餘數據的並行操做,粒度主要就是對操做數據的鎖的單元。
阻塞和死鎖
Innodb狀態檢查
show engine innodb status
適用場景
Innodb適合於大多數OLTP應用