MyISAM是mysql 默認存儲引擎,它不支持事務,外鍵。但訪問速度快,對事務完整性沒有要求或者以select,insert 爲主的應用基本上均可以使用這個引擎。
每一個MyISAM在磁盤上存儲成3個文件,文件名都和表名相同,擴展分別是:
.frm(存儲表定義)
.MYD(MYdata 存儲數據)
.MYI( MYIndex 存儲索引)
數據文件和索引文件能夠放置在不一樣的目錄,平均分佈IO,獲取更快速度。mysql
1. 指定索引文件和數據文件的路徑sql
在建立表的時候經過data directory和 index directory語句指定, 也就是不一樣MyISAM表的索引文件和數據文件能夠放置到不一樣的路徑下,文件路徑須要是絕對路徑,而且有訪問權限緩存
-- 默認存儲路徑 SELECT @@datadir;
-- 首先要建立/ibddir目錄,有5.6才支持單表指定目錄 CREATE TABLE test_dir_table( strative_id VARCHAR(16) NOT NULL, date_id VARCHAR(8) NOT NULL PRIMARY KEY (strative_id) ) ENGINE=MYISAM DATA DIRECTORY = '/ibddir' INDEX DIRECTORY= '/ibddir';
2. 檢查表的健康狀態併發
表可能會損壞,緣由多種多樣,check table對MYISAM和InnoDB表都有做用,如檢查有異常使用(repair table表名;)來修復。工具
語法:
CHECK TABLE tbl_name[,tbl_name] ... [option] ...
option= {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}spa
CHECK TABLE ai;
3. MYISAM表3種不一樣的存儲格式日誌
3.1 靜態(固定長度)表, 動態表, 壓縮表。 其中靜態表是默認的存儲格式,字段都是非變長字段,每一個記錄都是固定長度。這種存儲方式的優勢是存儲很是迅速,容易緩存,出現故障容易恢復,缺點是空間佔用多,存儲時會按照寬度定義補足空格,但應用訪問時並不會獲得這些空格。
但有個注意是: 若是保存的內容後面原本就帶有空格,在應用訪問時也會被自動去掉,從而丟失了尾部空格 。code
CREATE TABLE Myisam_char (NAME CHAR(10)) ENGINE=MYISAM; INSERT INTO Myisam_char VALUES('abcde'),('abcde '),(' abcde'),(' abcde '); SELECT NAME,LENGTH(NAME) FROM Myisam_char;
從下面的輸出看出,前面空格保留了。blog
3.2 動態表中包含變長字段,記錄不是固定長度的,優點是佔用的空間相對比較小,但頻繁的更新刪除記錄會產生碎片,須要按期optimize table或myisamchk -r命令,出現故障時恢復相對比較困難。索引
3.3 壓縮表由myisampack 工具建立,佔據很是小的磁盤空間,每一個記錄是被單獨壓縮的。
4.最後在回顧下myisam支持的特性
存儲限制: 「有」, 官方是256TB 鎖機制 : "表鎖" 適用於併發性低的場景 B樹索引 : "支持" 全文索引 :"支持" 索引緩存 :"支持" 數據壓縮 :"支持" 空間使用 :"低" 默認是靜態存儲空格 內存使用 :"低" 由於不支持數據緩存 批理插入的速度: "高" 由於不支持支持事務,不須要寫入日誌文件