MySQL儲存引擎 MyISAM 介紹
MyISAM是mysql 預設儲存引擎,它不支援事務,外來鍵。但訪問速度快,對事務完整性沒有要求或者以select,insert 為主的應用基本上都可以使用這個引擎。
每個MyISAM在磁碟上儲存成3個檔案,檔名都和表名相同,擴充套件分別是:
- frm(儲存表定義)
- MYD(MYdata 儲存資料)
- MYI( MYIndex 儲存索引)
資料檔案和索引檔案可以放置在不同的目錄,平均分佈IO,獲取更快速度。
1. 指定索引檔案和資料檔案的路徑
在建立表的時候通過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}
CHECK TABLE ai;
3. MYISAM表3種不同的儲存格式
3.1 靜態(固定長度)表, 動態表, 壓縮表。 其中靜態表是預設的儲存格式,欄位都是非變長欄位,每個記錄都是固定長度。這種儲存方式的優點是儲存非常迅速,容易快取,出現故障容易恢復,缺點是空間佔用多,儲存時會按照寬度定義補足空格,但應用訪問時並不會得到這些空格。
但有個注意是: 如果儲存的內容後面本來就帶有空格,在應用訪問時也會被自動去掉,從而丟失了尾部空格 。
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;
從下面的輸出看出,前面空格保留了。
3.2 動態表中包含變長欄位,記錄不是固定長度的,優勢是佔用的空間相對比較小,但頻繁的更新刪除記錄會產生碎片,需要定期optimize table或myisamchk -r命令,出現故障時恢復相對比較困難。
3.3 壓縮表由myisampack 工具建立,佔據非常小的磁碟空間,每個記錄是被單獨壓縮的。
4.最後在回顧下myisam支援的特性
儲存限制: “有”, 官方是256TB
鎖機制 : "表鎖" 適用於併發性低的場景
B樹索引 : "支援"
全文索引 :"支援"
索引快取 :"支援"
資料壓縮 :"支援"
空間使用 :"低" 預設是靜態儲存空格
記憶體使用 :"低" 因為不支援資料快取
批理插入的速度: "高" 因為不支援支援事務,不需要寫入日誌檔案
Linux公社的RSS地址 : ofollow,noindex" target="_blank">https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2018-09/154351.htm