5 BLACKHOLE - 黑洞引擎
支援事務,而且支援mvcc的行級鎖,寫入這種引擎表中的任何資料都會消失,主要用于做日志記錄或同步歸檔的中繼存儲,該存儲引擎除非有特别目的,否則不适合使用。
适用場景1
使用BLACKHOLE存儲引擎的表不存儲任何資料,但如果mysql啟用了二進制日志,SQL語句被寫入日志(并被複制到從伺服器)。這樣使用BLACKHOLE存儲引擎的mysqld可以作為主從複制中的中繼重複器或在其上面添加過濾器機制。例如,假設你的應用需要從伺服器側的過濾規則,但傳輸所有二進制日志資料到從伺服器會導緻較大的網絡流量。在這種情況下,在主伺服器主機上建立一個僞從伺服器程序。

場景2:
如果配置一主多從的話,多個從伺服器會在主伺服器上分别開啟自己相對應的線程,執行binlogdump指令而且多個此類程序并不是共享的。為了避免因多個從伺服器同時請求同樣的事件而導緻主機資源耗盡,可以單獨建立一個僞的從伺服器或者叫分發伺服器。
ARCHIVE
差別于InnoDB和MyISAM,ARCHIVE提供壓縮功能,擁有高效地插入。
但不支援索引,是以查詢性能較差。
支援insert、replace和select操作,不支援update和delete。
适用場景
資料歸檔
壓縮比非常高,存儲空間大概是innodb的10-15分之一,是以存儲曆史資料非常适合,由于不支援索引也不能緩存索引和資料,不适合作為并發通路表。
日志表
因為高壓縮和快速插入的特點。
但前提是不經常對該表進行查詢。
PERFORMANCE_SCHEMA:
該引擎主要用于收集資料庫伺服器性能參數。這種引擎提供以下功能:提供程序等待的詳細資訊,包括鎖、互斥變量、檔案資訊;儲存曆史的事件彙總資訊,為提供MySQL伺服器性能做出詳細的判斷;對于新增和删除監控事件點都非常容易,并可以随意改變mysql伺服器的監控周期,例如(CYCLE、MICROSECOND)。 MySQL使用者是不能建立存儲引擎為PERFORMANCE_SCHEMA的表。
場景: DBA能夠較明細得了解性能降低可能是由于哪些瓶頸。
Merge
Merge允許将一組使用MyISAM存儲引擎的并且表結構相同(即每張表的字段順序、字段名稱、字段類型、索引定義的順序及其定義的方式必須相同)的資料表合并為一個表,友善了資料的查詢。
場景:MySQL中沒有物化視圖,視圖的效率極低,故資料倉庫中資料量較大的每天、每周或者每個月都建立一個單一的表的曆史資料的集合可以通過Merge存儲引擎合并為一張表。
Federated
該存儲引擎可以 将不同的MySQL伺服器聯合起來,邏輯上組成一個完整的資料庫。非常适合資料庫分布式應用。
可以使你在本地資料庫中通路遠端資料庫中的資料,針對federated存儲引擎表的查詢會被發送到遠端資料庫的表上執行,本地不存儲任何資料。
場景: dblink。
缺點
- 對本地虛拟表的結構修改,并不會修改遠端表的結構
- truncate 指令,會清除遠端表資料
- drop指令隻會删除虛拟表,并不會删除遠端表
- 不支援 alter table 指令
- select count(*), select * from limit M, N 等語句執行效率非常低,資料量較大時存在嚴重問題,但若按主鍵或索引列查詢,則很快,如以下查詢就非常慢(假設 id 為主索引)
select id from db.tablea where id >100 limit 10 ;
而以下查詢就很快:
select id from db.tablea where id >100 and id<150
如果虛拟虛拟表中字段未建立索引,而實體表中為此字段建立了索引,此種情況下,性能也相當差。但是當給虛拟表建立索引後,性能恢複正常。
類似 where name like "str%" limit 1 的查詢,即使在 name 列上建立索引,也會導緻查詢過慢,是因為federated會将所有滿足條件的記錄讀取到本地,再進行 limit 處理。