問題
解析
存儲引擎(Storage Engine)就是指表的類型以及表在計算機上的存儲方式。 存儲引擎的概念是MySQL的特點,,提供了存儲引擎接口,,有興趣的開發(fā)者可以編寫自己的存儲引擎。Oracle,、SQL Server面試的時候不會問到存儲引擎,,所以這里不再敘述。
在mysql客戶端中,使用以下命令可以查看MySQL支持的引擎:
在MySQL從3.23.34a開始包含InnoDB,。有以下特點:
總結:InnoDB的優(yōu)勢在于提供了良好的事務處理、崩潰修復能力和并發(fā)控制,。缺點是讀寫效率較差,,占用的數據空間相對較大。使用場景,,如:銀行(對事務的完整性要求比較高),,售票(要求實現并發(fā)控制)。
MyISAM基于ISAM存儲引擎,,并對其進行擴展,。MyISAM擁有較高的插入、查詢速度,,但不支持事物,。曾經是MySQL的默認存儲引擎。 MyISAM的表存儲成3個文件,。文件的名字與表名相同,。文件類型:文件存儲表定義的擴展名為.frm、數據文件的擴展名為.MYD(MYData),、索引文件的擴展名時.MYI(MYIndex),。 基于MyISAM存儲引擎的表支持3種不同的存儲格式。包括靜態(tài)型,、動態(tài)型和壓縮型,。其中,靜態(tài)型是MyISAM的默認存儲格式,,它的字段是固定長度的,;動態(tài)型包含變長字段,記錄的長度不是固定的,;壓縮型需要用到myisampack工具,,占用的磁盤空間較小。 總結:MyISAM的優(yōu)勢在于占用空間小,處理速度快,。缺點是不支持事務的完整性和并發(fā)性,。
MEMORY是MySQL中一類特殊的存儲引擎。它使用存儲在內存中的內容來創(chuàng)建表,,而且數據全部放在內存中,。 數據存儲在內存中,這樣有利于快速處理,,提高整個表的效率,。這就要求,服務器需要有足夠的內存來維持MEMORY存儲引擎的表的使用,。如果不需要了,,可以釋放內存,甚至刪除不需要的表,。 總結:MEMORY用到的很少,,因為它是把數據存到內存中,如果重啟或者關機,,所有數據都會消失,。
用于數據歸檔,壓縮比非常高,,存儲空間大概是innodb的10-15分之一,。所以它用來存儲歷史數據非常適合,如記錄日志信息,。archive存儲引擎支持insert,、replace和select操作,但是不支持update和delete,,不支持事務,,其設計目標只是提供高速的插入和壓縮功能。
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存儲引擎將這些表合并成一張“虛擬表”。
查詢`u_log`后,,得: `u_log`表 總結:主要用于合并查詢多張結構相同的表。 附錄
后面跟ENGINE=MyISAM,,即可指定使用MyISAM存儲引擎,以此類推,。 2.如何查看表使用了某種存儲引擎?
3.如何修改表使用的存儲引擎?
4.附上表格: 原創(chuàng)作品,本系列為面試題 關注小編,,后續(xù)會推出更多面試系列作品 |
|
來自: 昵稱11935121 > 《未命名》