?
This document uses PHP Chinese website manual Release
MySQL 5.5 之前版本默認存儲引擎,在排序、分組等操作中,當數(shù)量超過一定大小之后,由查詢優(yōu)化器建立的臨時表。
MyISAM 存儲引擎表由 MYD (表數(shù)據(jù)) 、MYI (表索引) 與 frm (表結(jié)構(gòu)) 組成。
并發(fā)性與鎖級別
表級鎖
表損壞修復(fù)
check table tableName repair table tabelName
MyISAM 表支持的索引類型
fulltext
MyISAM表支持數(shù)據(jù)壓縮
myisampack
壓縮后的表無法進行寫操作,只能進行讀操作。
在 MySQL 版本小于 5.0 時,默認表大小為 4G,如存儲大表則要修改表的 MAX_Rows
和 AVG_ROW_LENGTH
參數(shù)。
在MySQL版本大于5.0時,默認支持為 256TB。
非事務(wù)型應(yīng)用
只讀類應(yīng)用
空間類的應(yīng)用
MySQL5.5 及之后版本默認存儲引擎。
InnoDB 使用表空間進行數(shù)據(jù)存儲
如果數(shù)據(jù)庫的配置參數(shù) innodb_file_pre_table => on
,那么創(chuàng)建后的 InnoDB 引擎的表將產(chǎn)生 tableName.frm
和 tableName.ibd
文件。
如果數(shù)據(jù)庫的配置參數(shù) innodb_file_pre_table => off
,那么創(chuàng)建后的 InnoDB 引擎的表將產(chǎn)生 ibdata*
(共享表空間) 和 tableName.frm
那么,系統(tǒng)表空間和獨立表空間要如何選擇呢?
innodb_file_pre_table => off
建立的表情況下,系統(tǒng)表空間無法簡單的收縮系統(tǒng)文件大小,造成大量的空間浪費,并且會產(chǎn)生大量的磁盤碎片,從而降低系統(tǒng)的性能。
獨立表空間可以通過 optimize table
命令收縮系統(tǒng)文件。
系統(tǒng)表空間會產(chǎn)生IO瓶頸
獨立表空間可以同時向多個文件刷新數(shù)據(jù)
建議對 InnoDB 使用獨立表空間,即
innodb_file_pre_table => on
InnoDB 是一種事務(wù)性存儲引擎
完全支持事務(wù)的 ACID 特性
InnoDB 支持行級鎖
行級鎖可以最大程度的支持并發(fā)
行級鎖是有存儲引擎層實現(xiàn)
鎖的類型:
共享鎖(也稱讀鎖)
獨占鎖(也稱寫鎖)
InnoDB 狀態(tài)檢查
show engine innodb status
適用場景
InnoDB適用于大多數(shù) OLTP 應(yīng)用
數(shù)據(jù)以文本方式存儲在文件中,他們分別包含有如下文件:
.csv
文件存儲表內(nèi)容
.csm
文件存儲標的元數(shù)據(jù)如表狀態(tài)和數(shù)據(jù)量
.frm
文件存儲表結(jié)構(gòu)信息
以 csv 格式進行數(shù)據(jù)存儲
所有列必須都是不能為 null 的數(shù)據(jù)
不支持索引
可以對數(shù)據(jù)文件直接編輯
適合作為數(shù)據(jù)交換的中間表
以 zlib 對表數(shù)據(jù)進行壓縮,磁盤 I/O更少
數(shù)據(jù)存儲在 tableName.ARZ
為后綴的文件中
只支持 insert
和 select
操作
只允許在自增 ID 列上加索引
日志和數(shù)據(jù)采集類應(yīng)用
也稱 heap 存儲引擎,所以數(shù)據(jù)保存在內(nèi)存中。
支持 hash 索引(等值查找快)和 Btree 索引(范圍查找快)
所有字段都為固定長度,例如:varchar(10) = char(10)
不支持 BLOB/TEXT
等大字段
Memory
存儲引擎使用表級鎖
最大大小由 max_heap_table_size
參數(shù)決定
用于查找或者是映射表,例如:郵編和地區(qū)的對應(yīng)表
用于保存數(shù)據(jù)分析中產(chǎn)生的中間表
用于緩存周期性聚合數(shù)據(jù)的結(jié)果表
Memory 數(shù)據(jù)易丟失,所以要求數(shù)據(jù)可再生。
默認禁止,啟用需要在啟動時增加 federated 參數(shù)。
mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
提供了訪問遠程MySQL服務(wù)器上表的方法
本地不存儲數(shù)據(jù),數(shù)據(jù)全部放到遠程服務(wù)器上
本地需要保存表結(jié)構(gòu)和遠程服務(wù)器的連接信息