說一說MySQL幾種常用的存儲引擎?
它們的區別是什麼?
解析前言
存儲引擎(Storage Engine)就是指表的類型以及表在電腦上的存儲方式。
存儲引擎的概念是MySQL的特點, 提供了存儲引擎介面, 有興趣的開發者可以編寫自己的存儲引擎。 Oracle、SQL Server面試的時候不會問到存儲引擎, 所以這裡不再敘述。
存儲引擎查看
在mysql用戶端中, 使用以下命令可以查看MySQL支援的引擎:
mysql> show engines;
InnoDB存儲引擎
在MySQL從3.23.34a開始包含InnoDB。 有以下特點:
它遵循ACID模式設計, 提供了具有提交、回滾和崩潰恢復能力的事務安全。
為了維護資料完整性, InnoDB還支援外鍵完整性約束。
支持自動增加列AUTO_INCREMENT(自動增長列)屬性。
InnoDB 提供行級鎖, 大幅度提高了多使用者併發操作的性能。
總結:InnoDB的優勢在於提供了良好的交易處理、崩潰修復能力和併發控制。 缺點是讀寫效率較差, 佔用的資料空間相對較大。 使用場景, 如:銀行(對事務的完整性要求比較高), 售票(要求實現併發控制)。
MyISAM存儲引擎
MyISAM基於ISAM存儲引擎, 並對其進行擴展。 MyISAM擁有較高的插入、查詢速度, 但不支援事物。 曾經是MySQL的預設存儲引擎。
MyISAM的表存儲成3個檔。 文件的名字與表名相同。 檔案類型:檔存儲表定義的副檔名為.frm、資料檔案的副檔名為.MYD(MYData)、索引檔的副檔名時.MYI(MYIndex)。
基於MyISAM存儲引擎的表支援3種不同的存儲格式。 包括靜態型、動態型和壓縮型。 其中, 靜態型是MyISAM的預設存儲格式, 它的欄位是固定長度的;動態型包含變長欄位,
總結:MyISAM的優勢在於佔用空間小, 處理速度快。 缺點是不支援事務的完整性和併發性。
MEMORY存儲引擎
MEMORY是MySQL中一類特殊的存儲引擎。 它使用存儲在記憶體中的內容來創建表, 而且資料全部放在記憶體中。
資料存儲在記憶體中, 這樣有利於快速處理, 提高整個表的效率。 這就要求, 伺服器需要有足夠的記憶體來維持MEMORY存儲引擎的表的使用。 如果不需要了, 可以釋放記憶體, 甚至刪除不需要的表。
總結:MEMORY用到的很少, 因為它是把資料存到記憶體中, 如果重啟或者關機, 所有資料都會消失。
Archive存儲引擎
用於資料歸檔, 壓縮比非常高, 存儲空間大概是innodb的10-15分之一。
MERGE存儲引擎
MERGE存儲引擎, 也被認識為MRG_MyISAM引擎, 是一組MyISAM表的組合, 這些MyISAM表結構必須完全相同。
舉個例子:
我們現在要記錄使用者登錄和操作的日誌, 假設這裡使用MyISAM引擎建表。 為了防止歷史資料積累, 使表過大。 一般的做法是將資料分成很多表, 每個名稱與特定的時間相關。 比如`t_log_201801`,`t_log_201802`。
假設`t_log_201801`表有以下資料:
`t_log_201801`表
假設`t_log_201802`表有以下資料:
`t_log_201802`表
如果我們要查Tom的登錄情況, 可以用join聯立多張表。 也可以用MERGE存儲引擎將這些表合併成一張“虛擬表”。
CREATE TABLE IF NOT EXISTS `u_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`log` varchar(50) DEFAULT NULL,
`username` varchar(50) DEFAULT NULL,
INDEX(id)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 UNION=(t_log_201801,t_log_201802)
查詢`u_log`後, 得:
`u_log`表
總結:主要用於合併查詢多張結構相同的表。
如何指定表使用某種存儲引擎?
CREATE TABLE IF NOT EXISTS `t_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`log` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
後面跟ENGINE=MyISAM, 即可指定使用MyISAM存儲引擎, 以此類推。
2.如何查看表使用了某種存儲引擎?
show create table `t_test`; --`t_test`為表名
3.如何修改表使用的存儲引擎?
alter table `t_test` engine=MyISAM; --`t_test`為表名
4.附上表格:
原創作品, 本系列為面試題
關注小編, 後續會推出更多面試系列作品