簡介
資料庫存盤引擎:是資料庫底層軟體組織,資料庫管理系統(DBMS)使用資料引擎進行創建、查詢、更新和洗掉資料,不同的存盤引擎提供不同的存盤機制、索引技巧、鎖定水平等功能,使用不同的存盤引擎,還可以獲得特定的功能,現在許多不同的資料庫管理系統都支持多種不同的資料引擎,MySQL 的核心就是插件式存盤引擎,測驗面試寶典 ,
查看引擎
可以使用 SHOW ENGINES; 查看當前資料庫支持的所有存盤引擎

Engine 列,代表存盤引擎型別;Support 列代表對應存盤引擎是否能用,YES 表示可以用,NO 表示不能用,DEFAULT 表示當前默認的存盤引擎
myql 提供了多種不同存盤引擎,也可以在一個資料庫中,針對不同的要求,使用不同的存盤引擎,
SHOW VARIABLES LIKE '%storage_engine%'; 可以查看當前資料庫默認的存盤引擎

引擎介紹
- InnoDB 存盤引擎
- InnoDB 是事務型資料庫的首選引擎,支持事務安全表(ACID),其它存盤引擎都是非事務安全表,支持行鎖定和外鍵,MySQL5.5 以后默認使用 InnoDB 存盤引擎,
- InnoDB 為 MySQL 提供了具有提交、回滾和崩潰恢復能力的事務安全(ACID 兼容)存盤引擎,
- InnoDB 表,自動增長列必須是索引,如果是組合索引,也必須是組合索引的第一列,
- InnoDB 設計的目標是處理大容量的資料庫系統,這種引擎的表會在記憶體中建立緩沖池,用來緩沖資料和索引,
- MySQL 外鍵的存盤引擎只有 InnoDB
- 適用場景:
- 經常更新的表,多并發的表
- 大資料量
- 支持事務
- 容災恢復
- 外鍵約束
- MyISAM 存盤引擎
- MyISAM 基于 ISAM 存盤引擎,并對其進行擴展,它是在 Web、資料倉儲和其他應用環境下最常使用的存盤引擎之一,MyISAM 擁有較高的插入、查詢速度,但不支持事務,不支持外鍵,
- MYD 檔案是存 MyISAM 的資料檔案;MYI 檔案是存 MyISAM 的索引檔案;frm 檔案是存 MyISAM 的表結構
- MyISAM 的表支持 3 種不同的存盤格式:靜態(固定長度)表,動態表,壓縮表
- 靜態表:表中的欄位都是非變長欄位,這樣每個記錄都是固定長度的,優點存盤非常迅速,容易快取,出現故障容易恢復;缺點是占用的空間通常比動態表多
- 動態表:記錄不是固定長度的,這樣存盤的優點是占用的空間相對較少;缺點:頻繁的更新、洗掉資料容易產生碎片,需要定期執行 OPTIMIZE TABLE 或者 myisamchk-r 命令來改善性能
- 壓縮表:因為每個記錄是被單獨壓縮的,所以只有非常小的訪問開支
- 適用場景
- 不支持事務、外鍵的設計
- 查詢速度很快,極度強調讀操作,而且不占用大量的記憶體和存盤資源
- 整表加鎖
- MEMORY 存盤引擎
- Memory 存盤引擎使用存在于記憶體中的內容來創建表,所以也有叫 HEAP 堆記憶體引擎,每個 memory 表只實際對應一個磁盤檔案,格式是,frm,memory 型別的表訪問非常的快,因為它的資料是放在記憶體中的,并且默認使用 HASH 索引,但是一旦服務關閉,表中的資料就會丟失掉,
- MEMORY 存盤引擎的表可以選擇使用 BTREE 索引或者 HASH 索引
- Hash 索引優點:Hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,查詢效率要遠高于 B-Tree 索引;但是,hash 演算法是基于等值計算的,所以模糊查詢,hash 索引無效,不支持
- 適用場景:
- Memory 型別的存盤引擎主要用于內容變化低、不頻繁的,如代碼表
- 目標資料比較小,而且非常頻繁的進行訪問的
- 資料是臨時的,而且必須立即可用得到的
對存盤引擎為 memory 的表進行更新操作要謹慎,因為資料并沒有實際寫入到磁盤中
- MERGE \ MRG-MYISAM 存盤引擎
- Merge 存盤引擎是一組 MyISAM 表的組合,這些 MyISAM 表必須結構完全相同,merge 表本身并沒有資料,對 merge 型別的表可以進行查詢,更新,洗掉操作,這些操作實際上是對內部的 MyISAM 表進行的
- MRG-MYISAM 是一種水平分表方式存盤引擎,把多個 myisam 的表聚合起來,但是他內部沒有資料,真正的資料依然是 myisam 引擎,
- 使用場景:
- 水平分表
- BLACKHOLE 黑洞引擎
- 任何寫入此引擎的資料均會被丟棄,不做實際存盤,select 結果永遠為空
- 使用場景
- 復制資料到備份資料庫
- 驗證 dump file 命令的正確性
- 檢測 binlog 功能所需的額外負載
- 充當日志服務器
存盤引擎對比
- MyISAM 引擎不支持事務等高級處理,Innodb 支持,提供事務支持、外鍵等高級功能
- Innodb 引擎是行鎖,但是也不是絕對的,當不確定范圍時,Innodb 還是會鎖表的
- MyISAM 引擎強調的是性能,讀性能非常好,比 Innodb 速度要快,
- MySQL 資料庫默認是開啟事務的,Innodb 引擎表,要在提交大量資料時,可以先關閉自動提交事務
set autocommit=0;待資料執行完后,再開啟事務自動提交set autocommit=1;以此來提高速度,不然,大資料提交非常慢
- MySQL 資料庫默認是開啟事務的,Innodb 引擎表,要在提交大量資料時,可以先關閉自動提交事務
- 對于 auto_increment 型別的欄位, Innodb 中必須包含只有該欄位的索引,而 MyISAM 表中,可以和其他欄位一起建立聯合索引,
- MyISAM 支持全文索引(fulltext)、壓縮引擎,Innodb 不支持測驗面試寶典 ,
- MyISAM 引擎表索引和資料分開存在兩個不同格式檔案中,并且索引是壓縮的;而 Innodb 表的索引和資料是捆綁在一起的,沒有壓縮,所以,同等資料量,Innodb 引擎表占用的存盤空間更大,
- Innodb 表資料備份,要先到處 SQL 備份,
load table from master操作對 Innodb 不起作用,要解決這個問題,需要先把表的引擎 Innodb 改成 MyISAM,匯入資料后,再改成 Innodb,但要注意,外鍵只有 Innodb 支持,MyISAM 不支持,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296109.html
標籤:其他
