mysql學習->存儲引擎(Myisam)
查看當前的mysql存儲引擎:show engines \G或者show variables like ‘have%‘;
以上兩種方法查看當前的數據庫支持哪些存儲引擎,其中DISAVLED的記錄表示支持該存儲引擎,但是數據庫啟動的時候被禁用
在創建新表的時候可以通過ENGINE關鍵字來設置新建表的存儲引擎,不設置的時候會默認當前數據庫默認的引擎,可以設置的
可以用alter table 數據庫定義語句來修改引擎:alter table t1 engine = innodb;
存儲引擎之間的區別
特點 |
Myisam |
innodb |
MENORY |
MERGE |
NDB |
存儲限制 | 有 | 64TB | 有 | 沒有 | 有 |
事務安全 | 支持 | ||||
鎖機制 | 表鎖 | 行鎖 | 表鎖 | 表鎖 | 行鎖 |
B樹索引 | 支持 | 支持 | 支持 | 支持 | 支持 |
哈希索引 | 支持 | 支持 | |||
全文索引 | 支持 | ||||
集群索引 | 支持 | ||||
數據緩存 | 支持 | 支持 | 支持 | ||
索引緩存 | 支持 | 支持 | 支持 | 支持 | 支持 |
數據可壓縮 | 支持 | ||||
空間使用 | 低 | 高 | N/A | 低 | 低 |
內存使用 | 低 | 高 | 中等 | 低 | 高 |
批量插入的速度 | 高 | 低 | 高 | 高 | 高 |
支持外鍵 | 支持 |
Myisam引擎:
Myisam是mysql的默認引擎,Myisam不支持事務,也不支持外鍵,其優勢是訪問的速度
每個Myisam引擎在磁盤上存儲成3個文件,其文件名都和表名相同,但擴展名分別是
.frm(存儲定義)
.MYD(MYDdata,存儲數據)
.MYI(MYIndex,存儲索引)
數據文件和索引文件可以放置在不同的目錄,平均分布IO,獲得更快的速度
要制定索引文件和數據文件的路徑,需要在創建表的時候通過DATA DIRECTORY和INDEX DIRECTORY語句指定,也就是說不同Myisam表的索引文件和數據文件可以放置到不同的路徑下,文件路徑需要的是絕對路徑,並且具有訪問權限
註意:Myisam類型的表可能會損壞,原因會有很多種,損壞後的表不能訪問,會提示需要修復或者訪問後返回錯誤結果,可以使用CHECK TABLE語句來檢查Myisam表的健康,並用REPAIR TABLE 語句修復一個損壞的Myisam表。
Myisam引擎的表還支持3種不同的存儲格式
靜態(固定長度)表:靜態表為默認的存儲格式,靜態表中的字段都非變長字段,都是固定長度,優點是存儲非常迅速,容易緩存,出現故障容易回復,缺點是占用的空間比動態多,靜態表的數據會根據列的寬度來補足空格,但是在應用訪問的時候不會得到這些空格~
最值得註意的是如果需要保存的內容後面本來就帶有空格,那麽在返回的時候也會被去掉
動態表中包含變長字段,記錄不是固定長度的,這樣存儲的優點是占用的空間相對較少,但是長期頻繁的更新和刪除記錄會產生碎片,需要定期執行OPTIMIZE TABLE語句或myisamchk-r命令來改善性能,並且在出現故障時恢復相對比較困難
壓縮表myisampack工具創建,占據非常小的磁盤空間,因為每個記錄是被單獨要鎖的,所以訪問只有非常小的訪問開支。
mysql學習->存儲引擎(Myisam)