久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

「面試題」MySQL幾種常用的存儲引擎及其區(qū)別,?

 昵稱11935121 2018-04-22

問題

  1. 說一說MySQL幾種常用的存儲引擎,?

  2. 它們的區(qū)別是什么?

解析

  • 前言

存儲引擎(Storage Engine)就是指表的類型以及表在計算機上的存儲方式

存儲引擎的概念是MySQL的特點,,提供了存儲引擎接口,,有興趣的開發(fā)者可以編寫自己的存儲引擎。Oracle,、SQL Server面試的時候不會問到存儲引擎,,所以這里不再敘述。

  • 存儲引擎查看

在mysql客戶端中,使用以下命令可以查看MySQL支持的引擎:

mysql> show engines;

「面試題」MySQL幾種常用的存儲引擎及其區(qū)別,?

  • InnoDB存儲引擎

在MySQL從3.23.34a開始包含InnoDB,。有以下特點:

  1. 它遵循ACID模式設計,提供了具有提交,、回滾和崩潰恢復能力的事務安全,。

  2. 為了維護數據完整性,InnoDB還支持外鍵完整性約束,。

  3. 支持自動增加列AUTO_INCREMENT(自動增長列)屬性。

  4. InnoDB 提供行級鎖,,大幅度提高了多用戶并發(fā)操作的性能,。

總結:InnoDB的優(yōu)勢在于提供了良好的事務處理、崩潰修復能力和并發(fā)控制,。缺點是讀寫效率較差,,占用的數據空間相對較大。使用場景,,如:銀行(對事務的完整性要求比較高),,售票(要求實現并發(fā)控制)。

  • MyISAM存儲引擎

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存儲引擎

MEMORY是MySQL中一類特殊的存儲引擎。它使用存儲在內存中的內容來創(chuàng)建表,,而且數據全部放在內存中,。

數據存儲在內存中,這樣有利于快速處理,,提高整個表的效率,。這就要求,服務器需要有足夠的內存來維持MEMORY存儲引擎的表的使用,。如果不需要了,,可以釋放內存,甚至刪除不需要的表,。

總結:MEMORY用到的很少,,因為它是把數據存到內存中,如果重啟或者關機,,所有數據都會消失,。

  • Archive存儲引擎

用于數據歸檔,壓縮比非常高,,存儲空間大概是innodb的10-15分之一,。所以它用來存儲歷史數據非常適合,如記錄日志信息,。archive存儲引擎支持insert,、replace和select操作,但是不支持update和delete,,不支持事務,,其設計目標只是提供高速的插入和壓縮功能。

  • MERGE存儲引擎

MERGE存儲引擎,,也被認識為MRG_MyISAM引擎,,是一組MyISAM表的組合,這些MyISAM表結構必須完全相同,。

舉個例子:

我們現在要記錄用戶登錄和操作的日志,,假設這里使用MyISAM引擎建表。為了防止歷史數據積累,,使表過大,。一般的做法是將數據分成很多表,每個名稱與特定的時間相關,。比如`t_log_201801`,`t_log_201802`,。

假設`t_log_201801`表有以下數據:

「面試題」MySQL幾種常用的存儲引擎及其區(qū)別,?

`t_log_201801`表

假設`t_log_201802`表有以下數據:

「面試題」MySQL幾種常用的存儲引擎及其區(qū)別?

`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`后,,得:

「面試題」MySQL幾種常用的存儲引擎及其區(qū)別,?

`u_log`表

總結:主要用于合并查詢多張結構相同的表。

附錄

  1. 如何指定表使用某種存儲引擎,?

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`為表名

「面試題」MySQL幾種常用的存儲引擎及其區(qū)別,?

3.如何修改表使用的存儲引擎?

alter table `t_test` engine=MyISAM; --`t_test`為表名

4.附上表格:

「面試題」MySQL幾種常用的存儲引擎及其區(qū)別,?


原創(chuàng)作品,本系列為面試題

關注小編,,后續(xù)會推出更多面試系列作品

    本站是提供個人知識管理的網絡存儲空間,,所有內容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內容中的聯系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多