mysql支持的存儲引擎
一:查詢數據庫支持的存儲引擎
執行: show engines;
說明
engine:引擎名稱。
suppot:是否支持。
comment:說明。
transactions:是夠支持事務。
xa:是否支持XA事務。
savepoints:是否支持保存savepoints之間的內容。
二:常用的引擎的介紹(常用的MyISAM和InnoDB)
.frm文件 //存儲表結構的,任何存儲引擎都具備的。
1:MyISAM
mysql5.5之前默認的存儲引擎,由MYD和MYI組成。
查看數據庫的data目錄/數據庫名稱/,在查找相對應的表名。
frm,myd,myi這三個結尾的文件。
.myd //數據庫文件
.myi //索引文件 又叫非聚集索引
特性:
並發性與鎖級別-表解鎖
支持全文索引
支持數據壓縮 命令:進入到mysql的bin文件夾, .\myisampack.exe -b -f "需要壓縮的test.MYI地址" (此命令實在Windows運行)。
運行完以后,會出現一個以OLD結尾的文件,刪除OLD可能會出現問題。需要恢復 CHECK table 表名,REPAIR table 表名
適用場景:
非事務的類型
只讀類應用,讀取數據的速度快
空間類型(坐標,空間函數)
2:innodb
mysql5.5以后默認的存儲引擎,innodb_file_per_table on:表示獨立表空間,OFF:表示系統表空間。5.6之前是系統表空間,之后為獨立表空間。
獨立表空間:.frm .ibd 存儲數據+索引。 可以通過 optimize table 表名 .ibd收縮數據文件,同時可以向多個文件刷新數據。
系統表空間:.frm是放在數據庫的文件下的。 .ibdata1是放在data文件夾下的,表公用的,會產生IO的瓶頸。 系統表空間無法簡單的收縮文件大小
建議使用獨立表空間。
特性:
是一種事務性存儲引擎。完全支持事務的ACID特性。執行行級鎖,並發程度高。Redo Log和Undo Log。
適用場景:
大多數的OLTP應用。
比較
3:CSV
數據以文本方式存儲,表的字段不能為空,不能有主鍵。
.frm , .csv數據的內容, .csm存儲表的元數據 。
使用文本編輯器可以直接編輯.csv數據,然后保存,在數據庫里面執行flush tables;
注:要在最后一行數據回車一下,要不然最后一條數據不展示。
在excel里面操作提示兼容性問題,無法操作成功,編輯完以后修復一下,可能是excel版本的問題吧。
特點:
以CSV格式進行數據存儲,所有列的字段都不能為null,不支持索引,可以對數據文件在線編輯。
4:Archive
以zlib對表數據進行壓縮,磁盤I/O更少,數據存儲在.ARZ。
.frm , .ARZ數據的內容。
特點:
只支持insert和select操作,只允許在自增ID列上加索引。
使用場景:
日志和數據采集應用
5:Memory
在data文件夾里面只有一個frm。
數據保存在內存中,支持hash索引和BTree索引,所有字段都是固定的長度varchar(10)=char(10),不支持Blog和Text等字段
使用表級索,最大有max_heap_table_size 決定。 重啟會丟失數據。
在系統使用臨時表的時候,超過限制會使用MyISAM,未超過的時候使用Memory
臨時表:在同一個session(會話)里面,才能使用。重啟服務會丟失數據。
應用場景:mysql后台服務使用Memory
6:Federated
訪問遠程的數據庫表,本地只保存數據庫結構和連接信息,數據保存在遠程的服務器中。在本地只保存.frm
默認不是開啟的引擎,在my.ini 增加 federated=1,重啟。
只能用命令創建。create table ‘aaa’(里面的字段,要和連接的服務器一樣) engine=federated connection='mysql://用戶名:密碼@地址:IP/數據庫名/表名'