Mysql所有引擎看這一篇就足夠了

現(xiàn)在業(yè)務(wù)離不開數(shù)據(jù),我們開發(fā)也離不開數(shù)據(jù)庫,有數(shù)據(jù)就要存儲,不管是NoSql還是關(guān)系數(shù)據(jù)庫,本質(zhì)都是存儲數(shù)據(jù)。目前的關(guān)系數(shù)據(jù)庫包括Mysql,Oracle,Sqlserver,PostgrcSQL, DB2,GBase等等。

現(xiàn)在市場主流數(shù)據(jù)庫還是以Mysql和Oracle為主,相信大家不管面試中級或者高級開發(fā),都會遇到數(shù)據(jù)庫引擎的問題,在這里我給大家介紹下mysql引擎,為什么沒聽過別人談?wù)揙racle引擎呢?
先給大家說下Oracle:

oracle中不存在引擎的概念,數(shù)據(jù)處理大致可以分成兩大類:聯(lián)機事務(wù)處理OLTP(on-line transaction processing)、聯(lián)機分析處理OLAP(On-Line Analytical Processing)。OLTP是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的主要應(yīng)用,主要是基本的、日常的事務(wù)處理,例如銀行交易。OLAP是數(shù)據(jù)倉庫系統(tǒng)的主要應(yīng)用,支持復(fù)雜的分析操作,側(cè)重決策支持,并且提供直觀易懂的查詢結(jié)果。

Oracle中OLTP和OLAP區(qū)別:

1.OLTP 系統(tǒng)強調(diào)數(shù)據(jù)庫內(nèi)存效率,強調(diào)內(nèi)存各種指標(biāo)的命令率,強調(diào)綁定變量,強調(diào)并發(fā)操作;
2.OLAP 系統(tǒng)則強調(diào)數(shù)據(jù)分析,強調(diào)SQL執(zhí)行市場,強調(diào)磁盤I/O,強調(diào)分區(qū)等。

那么數(shù)據(jù)庫引擎到底是什么?

數(shù)據(jù)庫引擎是用于存儲、處理和保護數(shù)據(jù)的核心服務(wù)。利用數(shù)據(jù)庫引擎可控制訪問權(quán)限并快速處理事務(wù),從而滿足企業(yè)內(nèi)大多數(shù)需要處理大量數(shù)據(jù)的應(yīng)用程序的要求。

如何查看mysql引擎:

1.查看表的引擎:show create table t;
2.修改表的引擎:alter table t engine=innodb;
3.查看可以提供哪些引擎:show engines;
4.查看當(dāng)前默認的存儲引擎:show variables like '%storage_engine%';

大家可以用命令(show engines;)先查看自己mysql所支持的引擎

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

如圖,支持InnoDB,CSV;MyISAM;BLACKHOLE;PERFORMANCE_SCHEMA;MRG_MYISAM;ARCHIVE;MEMORY ;FEDERATED——9個引擎

下面就給大家分析一下各個引擎:

(一)InnoDB

Innodb引擎是最常用的引擎也是mysql默認引擎(注意MySQL-5.5版本之后默認才改成Innodb,之前都是MyISAM),它提供了對數(shù)據(jù)庫ACID事務(wù)的支持。并且還提供了行級鎖和外鍵的約束。它的設(shè)計的目標(biāo)就是處理大數(shù)據(jù)容量的數(shù)據(jù)庫系統(tǒng)。它本身實際上是基于Mysql后臺的完整的系統(tǒng)。Mysql運行的時候,Innodb會在內(nèi)存中建立緩沖池,用于緩沖數(shù)據(jù)和索引。但是,該引擎是不支持全文搜索的。同時,啟動也比較的慢,它是不會保存表的行數(shù)的。當(dāng)進行Select count(*) from table指令的時候,需要進行掃描全表。所以當(dāng)需要使用數(shù)據(jù)庫的事務(wù)時,該引擎就是首選。由于鎖的粒度小,寫操作是不會鎖定全表的。所以在并發(fā)度較高的場景下使用會提升效率。

特性:

1:支持事務(wù)(要么全成功、要么全失敗);
2:行級鎖定(更新數(shù)據(jù)時一般指鎖定當(dāng)前行):注意間隙鎖的影響,行鎖和間隙鎖通過索引實現(xiàn),不用索引會表級鎖;
3:讀寫阻塞與事務(wù)的隔離級別相關(guān);
4:具有非常高的緩存特性(既能緩存索引、也能緩存數(shù)據(jù));
5:這個表和主鍵以組(Cluster)的方式存儲、組成一顆平衡樹;
6:所有的輔助索引(secondary indexes)都會保存主鍵信息;
7:支持分區(qū)、表空間類似與oracle 數(shù)據(jù)庫;
8:支持外鍵約束、不支持全文檢索(5.5.5之前的MyISAM支持全文檢索、5.5.5之后就不在支持);
9:相對MyISAM而言、對硬件的要求比較高

應(yīng)用場景:

1:需要支持事務(wù)的業(yè)務(wù);
2:行級鎖定對于高并發(fā)有很好的適應(yīng)能力、但是需要保證查詢是通過索引完成的;
3:數(shù)據(jù)讀寫都很頻繁的環(huán)境(如:BBS、微博等);
4:對數(shù)據(jù)一致性要求比較高的業(yè)務(wù)(如充值、銀行轉(zhuǎn)轉(zhuǎn));
5:硬件設(shè)備內(nèi)存較大、可以很好的利用InnoDB較好的緩存能里來提高內(nèi)存利用率、減少IO的開銷;

調(diào)優(yōu)精要:

1:主鍵盡可能的小、避免給輔助索引(secondary indexes)帶來過大的空間負擔(dān);
2:避免全表掃描(會使用表鎖);
3:盡可能的緩存所有的索引和數(shù)據(jù)、提高響應(yīng)速度、減少磁盤IO消耗;
4:在大批量小插入的時候、盡量自己控制事務(wù)、而不使用autocommit自動提交;
5:合理設(shè)置Innodb_flush_log_ad_trx_commit 參數(shù)值、不要過度追求安全性;
如果值為0、log buffer每秒就會被刷寫日志文件進入磁盤、提交事務(wù)的時候不做任何操作;
6:避免主鍵更新(主鍵更新會帶來大量的數(shù)據(jù)移動);

總結(jié)

如果你需要事務(wù),那就選InnoDB吧

(二)MyISAM

再說MyISAM之前,我們要先說下ISAM,也就是MyISAM的前生

ISAM是一個定義明確且歷經(jīng)時間考驗的數(shù)據(jù)表格管理方法,它在設(shè)計之時就考慮到 數(shù)據(jù)庫被查詢的次數(shù)要遠大于更新的次數(shù)。因此,ISAM執(zhí)行讀取操作的速度很快,而且不占用大量的內(nèi)存和存儲資源。ISAM的兩個主要不足之處在于,它不支持事務(wù)處理,也不能夠容錯:如果你的硬盤崩潰了,那么數(shù)據(jù)文件就無法恢復(fù)了。如果你正在把ISAM用在關(guān)鍵任務(wù)應(yīng)用程序里,那就必須經(jīng)常備份你所有的實時數(shù)據(jù),通過其復(fù)制特性,MYSQL能夠支持這樣的備份應(yīng)用程序。

MyISAM是MySQL的ISAM擴展格式和缺省的數(shù)據(jù)庫引擎。除了提供ISAM里所沒有的索引和字段管理的大量功能,MyISAM還使用一種表格鎖定的機制,來優(yōu)化多個并發(fā)的讀寫操作,其代價是你需要經(jīng)常運行OPTIMIZE TABLE命令,來恢復(fù)被更新機制所浪費的空間。MyISAM還有一些有用的擴展,例如用來修復(fù)數(shù)據(jù)庫文件的MyISAMCHK工具和用來恢復(fù)浪費空間的 MyISAMPACK工具。MYISAM強調(diào)了快速讀取操作,這可能就是為什么MySQL受到了WEB開發(fā)如此青睞的主要原因:在WEB開發(fā)中你所進行的大量數(shù)據(jù)操作都是讀取操作。所以,大多數(shù)虛擬主機提供商和INTERNET平臺提供商只允許使用MYISAM格式。MyISAM格式的一個重要缺陷就是不能在表損壞后恢復(fù)數(shù)據(jù)。

應(yīng)用場景:

1.不支持事務(wù)的設(shè)計,但是并不代表著有事務(wù)操作的項目不能用MyIsam存儲引擎,可以在service層進行根據(jù)自己的業(yè)務(wù)需求進行相應(yīng)的控制。
2.不支持外鍵的表設(shè)計。
3.查詢速度很快,如果數(shù)據(jù)庫查詢的操作比較多的話比較適用。
4.整天 對表進行加鎖的場景。
5.MyISAM極度強調(diào)快速讀取操作。
6.MyIASM中存儲了表的行數(shù),于是SELECT COUNT(*) FROM TABLE時只需要直接讀取已經(jīng)保存好的值而不需要進行全表掃描。如果表的讀操作遠遠多于寫操作且不需要數(shù)據(jù)庫事務(wù)的支持,那么MyIASM也是很好的選擇。

總結(jié)

不提供事務(wù)的支持,也不支持行級鎖和外鍵。因此當(dāng)執(zhí)行Insert插入和Update更新語句時,即執(zhí)行寫操作的時候需要鎖定這個表。所以會導(dǎo)致效率會降低。不過和Innodb不同的是,MyIASM引擎是保存了表的行數(shù),于是當(dāng)進行Select count(*) from table語句時,可以直接的讀取已經(jīng)保存的值而不需要進行掃描全表。所以,如果表的讀操作遠遠多于寫操作時,并且不需要事務(wù)的支持的。可以將MyIASM作為數(shù)據(jù)庫引擎的首先。但是要注意的是不能在表損壞后恢復(fù)數(shù)據(jù)。(是不能主動恢復(fù))

(三)MEMORY

使用存在內(nèi)存中的內(nèi)容來創(chuàng)建表。每個MEMORY表只實際對應(yīng)一個磁盤文件。MEMORY類型的表訪問非常得快,因為它的數(shù)據(jù)是放在內(nèi)存中的,并且默認使用HASH索引。
但是一旦服務(wù)關(guān)閉,表中的數(shù)據(jù)就會丟失掉。 HEAP允許只駐留在內(nèi)存里的臨時表格。駐留在內(nèi)存里讓HEAP要比ISAM和MYISAM都快,但是它所管理的數(shù)據(jù)是不穩(wěn)定的,而且如果在關(guān)機之前沒有進行保存,那么所有的數(shù)據(jù)都會丟失。在數(shù)據(jù)行被刪除的時候,HEAP也不會浪費大量的空間。HEAP表格在你需要使用SELECT表達式來選擇和操控數(shù)據(jù)的時候非常有用。

應(yīng)用場景:

1.那些內(nèi)容變化不頻繁的代碼表,或者作為統(tǒng)計操作的中間結(jié)果表,便于高效地堆中間結(jié)果進行分析并得到最終的統(tǒng)計結(jié)果。
2.目標(biāo)數(shù)據(jù)比較小,而且非常頻繁的進行訪問,在內(nèi)存中存放數(shù)據(jù),如果太大的數(shù)據(jù)會造成內(nèi)存溢出??梢酝ㄟ^參數(shù)max_heap_table_size控制Memory表的大小,限制Memory表的最大的大小。
3.數(shù)據(jù)是臨時的,而且必須立即可用得到,那么就可以放在內(nèi)存中。
4.存儲在Memory表中的數(shù)據(jù)如果突然間丟失的話也沒有太大的關(guān)系。
5.Memory同時支持散列索引和B樹索引,B樹索引可以使用部分查詢和通配查詢,也可以使用<,>和>=等操作符方便數(shù)據(jù)挖掘,散列索引相等的比較快但是對于范圍的比較慢很多。

總結(jié):

1.要求存儲的數(shù)據(jù)是數(shù)據(jù)長度不變的格式,比如,Blob和Text類型的數(shù)據(jù)不可用(長度不固定的)。
2.在用完表格之后就刪除表格。
3.我用Redis不香么?

(四)FEDERATED

FEDERATED引擎是MySQL5.5之后才加入,但是默認關(guān)閉,所以大家要用的時候要手動打開,需要大家在/etc/my.cnf,加入一行federated。在實際工作中,我們可能會遇到需要操作其他數(shù)據(jù)庫實例的部分表,但又不想系統(tǒng)連接多庫。此時我們就需要用到數(shù)據(jù)表映射。

應(yīng)用場景:

說到底就是跨庫join,比如我?guī)霢有user表,庫B有role表,但是我要關(guān)聯(lián)查詢庫A的user表和庫B的role表,這時候需要在庫A建立role虛擬表(它不需要你插入刪除修改,只是用來查詢,數(shù)據(jù)會從B庫映射過來),創(chuàng)建表結(jié)構(gòu)的時候加入引擎即可:

CREATE TABLE (......) 
ENGINE =FEDERATED CONNECTION='mysql://username:password@hostname:port/database/tablename'

username--mysql用戶名
password--mysql密碼
hostname--ip
port:端口號
database:數(shù)據(jù)庫名
tablename:表名

具體如下:

CREATE TABLE `sys_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(255) DEFAULT NULL COMMENT '權(quán)限名稱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='權(quán)限表'
ENGINE =FEDERATED CONNECTION='mysql://root:123456@127.0.0.2:3306/yang/sys_role'

數(shù)據(jù)會自動從127.0.0.2:3306/yang/sys_role中映射過來的

總結(jié)

1.目標(biāo)端建表結(jié)構(gòu)可以與源端不一樣 推薦與源端結(jié)構(gòu)一致
2.源端DDL語句更改表結(jié)構(gòu) 目標(biāo)端不會變化
3.源端DML語句目標(biāo)端查詢會同步
4.源端drop表 目標(biāo)端結(jié)構(gòu)還在但無法查詢
5.目標(biāo)端不能執(zhí)行DDL語句
6.目標(biāo)端執(zhí)行DML語句 源端數(shù)據(jù)也會變化
7.目標(biāo)端truncate表 源端表數(shù)據(jù)也會被清空
8.目標(biāo)端drop表對源端無影響
9.源端專門創(chuàng)建只讀權(quán)限的用戶來供目標(biāo)端使用。
10.目標(biāo)端建議用CREATE SERVER方式創(chuàng)建FEDERATED表。
11.FEDERATED表不宜太多,遷移時要特別注意。
12.目標(biāo)端應(yīng)該只做查詢使用,禁止在目標(biāo)端更改FEDERATED表。
13.建議目標(biāo)端表名及結(jié)構(gòu)和源端保持一致。
14.源端表結(jié)構(gòu)變更后 目標(biāo)端要及時刪除重建。

(五)MRG_MYISAM

截自MySql手冊:MERGE存儲引擎,也被認識為MRG_MyISAM引擎,是一個相同的可以被當(dāng)作一個來用的MyISAM表的集合."相同"意味著所有表同樣的列和索引信息.你不能合并列被以不同順序列于其中的表,沒有恰好同樣列的表,或有不同順序索引的表.而且,任何或者所有的表可以用myisampack來壓縮。

應(yīng)用場景:

是不是看起來云里霧里?其實他就是用來水平分表的,比如我在表table1,表table2,分別存入數(shù)據(jù),表uTable用MRG_MYISAM引擎并且UNION=(table1,table2) ,就可以把A1和A2的數(shù)據(jù)都聚合過來,當(dāng)做一個總表。

//新建表table1
CREATE TABLE IF NOT EXISTS `table1` (  
`id` int(11) NOT NULL AUTO_INCREMENT,  
`name` varchar(50) DEFAULT NULL,  
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
//新建表table2
CREATE TABLE IF NOT EXISTS `table2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
//在table1插入一條數(shù)據(jù)
INSERT INTO `table1` (`name`) VALUES('name1');
//在table2插入一條數(shù)據(jù)
INSERT INTO `table2` (`name`) VALUES('name2');
 //新建表uTable使用MRG_MyISAM引擎并且UNION=(table1,table2)
CREATE TABLE IF NOT EXISTS `uTable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
INDEX(id)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 UNION=(table1,table2) INSERT_METHOD=LAST AUTO_INCREMENT=1;
//查詢uTable
select id,name from uTable;
+----+--------+
| id | name   |
+----+--------+
|  1 | name1  |
|  1 | name2  |
+----+--------+
2 rows in set (0.00 sec)

總結(jié)

1.主表類似于SQL中的union機制。
2.主表結(jié)構(gòu)必須和基本表完全一致,包括列名、順序。UNION表必須同屬一DABASE。
3.基本表類型必須是MyISAM
4.定義在他上面的約束沒有所有作用,約束是由基本表控制的,例如兩個基本表中存在著同樣的一個Key值,那么在MERGE表中會有兩個相同的Key值。
5.每個表的主鍵要注意,不要用自增主鍵(可以用專門的一個表生成自增主鍵)
6.主表一般只允許查詢,不允許其他操作

(六)CSV

CSV存儲引擎可以將csv文件作為mysql的表進行處理。存儲格式就是普通的csv文件。有點類似Oracle的外部表。它可以將“逗號分隔值(CSV)文件”作為表進行處理,但不支持在這種文件上建立相關(guān)索引。在服務(wù)器運行中,這種引擎支持從數(shù)據(jù)庫中拷入/拷出CSV文件。如果從電子表格軟件輸出一個CSV文件,將其存放在MySQL服務(wù)器的數(shù)據(jù)目錄中,服務(wù)器就能夠馬上讀取相關(guān)的CSV文件。同樣,如果寫數(shù)據(jù)庫到一個CSV表,外部程序也可以立刻讀取它。在實現(xiàn)某種類型的日志記錄時,CSV表作為一種數(shù)據(jù)交換格式,特別有用。

應(yīng)用場景:

適合做為數(shù)據(jù)交換的中間表(能夠在服務(wù)器運行的時候,拷貝和拷出文件,可以將電子表格存儲為CSV文件再拷貝到MySQL數(shù)據(jù)目錄下,就能夠在數(shù)據(jù)庫中打開和使用。同樣,如果將數(shù)據(jù)寫入到CSV文件數(shù)據(jù)表中,其它web程序也可以迅速讀取到數(shù)據(jù)。

總結(jié)

1.以CSV格式進行數(shù)據(jù)存儲(逗號隔開,引號)
2.所有的列必須都是不能為NULL的
3.不支持索引(不適合大表,不適合在線處理)
4.可以對數(shù)據(jù)文件直接編輯(保存文本文件內(nèi)容)
5.數(shù)據(jù)以文本方式存儲在文件中(Innodb則是二進制)

(七)BLACKHOLE

MySQL在5.x系列提供了Blackhole引擎–“黑洞”. 其作用正如其名字一樣:任何寫入到此引擎的數(shù)據(jù)均會被丟棄掉, 不做實際存儲;Select語句的內(nèi)容永遠是空。

應(yīng)用場景:

在大規(guī)模的Mysql服務(wù)器集群中,如果是存在一臺主服務(wù),多臺從服務(wù)器,在繁忙的業(yè)務(wù)中,意味著主服務(wù)器每操作一個事件,都要往自己的二進制日志中寫數(shù)據(jù),同時還要往多臺從服務(wù)器發(fā)一次,N臺服務(wù)器指向一臺主服務(wù)器,那么需要主服務(wù)器發(fā)送N次,會啟動N個線程,每個線程各自從線程里讀二進制日志,那么會有大量的IO,本來是為主服務(wù)器減輕負擔(dān)的,那么這樣只能造成壓力越來越大,那這樣master主機就會為每臺slave主機分配出一個binlog dump進程,這樣的話會嚴重影響master的性能。
解決這種問題可以采用多級復(fù)制,主服務(wù)器還是保持主位置A,再拿一臺服務(wù)器作為從服務(wù)器B,主服務(wù)器A只啟動一個線程指向從服務(wù)器B,那么B服務(wù)器再作為其他N臺服務(wù)器的主,那么B就啟動了多個線程,怎么給B服務(wù)器減輕壓力呢?

black.png

在主從之間添加一個分布式master,配置blackhole存儲引擎,他起到一個中繼的作用,他接收數(shù)據(jù)但丟其他而不是存儲,只是會把master的二進制日志供下層的slave來讀取。
第一,讓B服務(wù)器不再執(zhí)行查詢操作;
第二,讓B服務(wù)器不再執(zhí)行寫操作;
第三,負責(zé)多線程為每個從服務(wù)器提供數(shù)據(jù),那么就不需要在B服務(wù)器存儲數(shù)據(jù)了,但是需要提供二進制日志和中繼日志,但B服務(wù)器又不需要數(shù)據(jù)庫;
把blackhole引擎,用做slave,配置一些過濾規(guī)則,比如復(fù)制某些表、不復(fù)制某些表。然后也作為一個master,帶多個slave。這樣的好 處是省了一定的網(wǎng)絡(luò)帶寬,如果沒有blackhole做中間環(huán)節(jié),那么就需要把第一個master的所有日志都傳遞到各個slave上去。經(jīng)過 blackhole這一個slave兼master過濾后再傳遞給多個slave,減少了帶寬占用。而使用blackhole引擎的原因是它不占硬盤空 間,作為一個中轉(zhuǎn),只負責(zé)記日志、傳日志。

總結(jié)

1.BLACKHOLE支持所有類型的索引
2.BLACKHOLE 表不存儲數(shù)據(jù),如果復(fù)制基于SBR,語句可以記錄并在從庫執(zhí)行;如果復(fù)制為RBR、MBR,UPDATE及DELETE操作將會跳過,不會記錄也從庫不執(zhí)行。
3.Insert觸發(fā)器可以正常使用,Update、Delete觸發(fā)器因為不存儲數(shù)據(jù)不能觸發(fā),F(xiàn)OR EACH ROW 也不能觸發(fā)。
4.BLACKHOLE 表Auto Increment字段不會自動遞增,也不保留自增字段的狀態(tài)
5.結(jié)合復(fù)制replicate-do和replicate-ignore規(guī)則,可使用BLACKHOLE當(dāng)做一個分發(fā)主服務(wù)器
6.可用來驗證轉(zhuǎn)儲文件語法
7.測試binlog的開銷量,通過對比 BLACKHOLE 與 不啟動 binlog的性能
8.可能被用來查找與存儲引擎自身不相關(guān)的性能瓶頸

(八)PERFORMANCE_SCHEMA

該引擎主要用于收集數(shù)據(jù)庫服務(wù)器性能參數(shù)。這種引擎提供以下功能:提供進程等待的詳細信息,包括鎖、互斥變量、文件信息;保存歷史的事件匯總信息,為提供MySQL服務(wù)器性能做出詳細的判斷;對于新增和刪除監(jiān)控事件點都非常容易,并可以隨意改變mysql服務(wù)器的監(jiān)控周期,例如(CYCLE、MICROSECOND)。 MySQL用戶是不能創(chuàng)建存儲引擎為PERFORMANCE_SCHEMA的表。

場景:

DBA能夠較明細得了解性能降低可能是由于哪些瓶頸。

總結(jié)

沒用過

(九)ARCHIVE

區(qū)別于InnoDB和MyISAM這兩種引擎,ARCHIVE提供了壓縮功能,擁有高效的插入速度,但是這種引擎不支持索引,所以查詢性能較差一些。 archive存儲引擎支持insert、replace和select操作,但是不支持update和delete。

場景:

1.存儲引擎基本上用于數(shù)據(jù)歸檔;它的壓縮比非常的高,存儲空間大概是innodb的10-15分之一所以它用來存儲歷史數(shù)據(jù)非常的適合,由于它不支持索引同時也不能緩存索引和數(shù)據(jù),所以它不適合作為并發(fā)訪問表的存儲引擎。
2.由于高壓縮和快速插入的特點Archive非常適合作為日志表的存儲引擎,但是前提是不經(jīng)常對該表進行查詢操作。

總結(jié)

由于高壓縮和快速插入的特點Archive非常適合作為日志表的存儲引擎,但是前提是不經(jīng)常對該表進行查詢操作。

最后給大家一個常用引擎區(qū)別的表

MYSQL常用的存儲引擎的區(qū)別

---------------------------------------------------------------------------------------------------------------------
種類  |  鎖機制 |   B_樹索引  | 哈希索引   |  外鍵   | 事務(wù)   |  索引緩存 | 數(shù)據(jù)緩存
---------------------------------------------------------------------------------------------------------------------
MYISAM|  表鎖  |     支持     | 不支持    |  不支持  |不支持  | 支持      |  不支持 
---------------------------------------------------------------------------------------------------------------------
INNODB|  行鎖  |     支持     | 不支持    |  支持    | 支持   | 支持      |  支持 
---------------------------------------------------------------------------------------------------------------------
MEMORY|  表鎖  |     支持     | 支持      |  不支持  |不支持  | 支持      |  支持
---------------------------------------------------------------------------------------------------------------------

備注:某些內(nèi)容源于網(wǎng)絡(luò),若有侵權(quán),請及時聯(lián)系

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容