MySQL之存儲引擎
MySQL體系結構
存儲引擎
InnoDB support for FULLTEXT indexes is available in MySQL 5.6.4 and later.
存儲引擎比較:https://docs.oracle.com/cd/E17952_01/mysql-5.5-en/storage-engines.html
MyISAM存儲引擎
MyISAM引擎特點:
不支持事務
表級鎖定
讀寫相互阻塞,寫入不能讀,讀時不能寫
只緩存索引
不支持外鍵約束
不支持聚簇索引
讀取數據較快,占用資源較少
不支持MVCC(多版本並發控制機制)高並發
崩潰恢復性較差
MySQL5.5.5前默認的數據庫引擎
適用場景:只讀(或者寫較少)、表較小(可以接受長時間進行修復操作)
MyISAM引擎文件:
tbl_name.frm: 表格式定義
tbl_name.MYD: 數據文件
tbl_name.MYI: 索引文件
InnoDB存儲引擎
InnoDB引擎特點:
支持事務,適合處理大量短期事務
行級鎖
讀寫阻塞與事務隔離級別相關
可緩存數據和索引
支持聚簇索引
崩潰恢復性更好
支持MVCC高並發
從MySQL5.5後支持全文索引
從MySQL5.5.5開始為默認的數據庫引擎
InnoDB數據庫文件
所有InnoDB表的數據和索引放置於同一個表空間中
表空間文件:datadir定義的目錄下
數據文件:ibddata1, ibddata2, ...
每個表單獨使用一個表空間存儲表的數據和索引
啟用:innodb_file_per_table=ON
兩類文件放在數據庫獨立目錄中
數據文件(存儲數據和索引):tb_name.ibd
表格式定義:tb_name.frm
其它存儲引擎
Performance_Schema:Performance_Schema數據庫
Memory :將所有數據存儲在RAM中,以便在需要快速查找參考和其他類似數據的環境中進行快速訪問。適用存放臨時數據。引擎以前被稱為HEAP引擎
MRG_MyISAM:使MySQL DBA或開發人員能夠對一系列相同的
Archive :為存儲和檢索大量很少參考的存檔或安全審核信息,只支持SELECT和INSERT操作;支持行級鎖和專用緩存區
Federated聯合:用於訪問其它遠程MySQL服務器一個代理,它通過創建一個到遠程MySQL服務器的客戶端連接,並將查詢傳輸到遠程服務器執行,而後完成數據存取,提供鏈接單獨MySQL服務器的能力,以便從多個物理服務器創建一個邏輯數據庫。非常適合分布式或數據集市環境
BDB:可替代InnoDB的事務引擎,支持COMMIT、ROLLBACK和其他事務特性
Cluster/NDB:MySQL的簇式數據庫引擎,尤其適合於具有高性能查找要求的應用程序,這類查找需求還要求具有最高的正常工作時間和可用性
CSV:CSV存儲引擎使用逗號分隔值格式將數據存儲在文本文件中。可以使用CSV引擎以CSV格式導入和導出其他軟件和應用程序之間的數據交換
BLACKHOLE :黑洞存儲引擎接受但不存儲數據,檢索總是返回一個空集。該功能可用於分布式數據庫設計,數據自動復制,但不是本地存儲(可作為MySQL主從復制中主和從的中間的庫)
example:“stub”引擎,它什麽都不做。可以使用此引擎創建表,但不能將數據存儲在其中或從中檢索。目的是作為例子來說明如何開始編寫新的存儲引擎
MariaDB支持的其它存儲引擎:
OQGraph
SphinxSE
TokuDB
Cassandra
CONNECT
SQUENCE
管理存儲引擎
查看mysql支持的存儲引擎:
show engines;
查看當前默認的存儲引擎:
show variables like '%storage_engine%';
設置默認的存儲引擎:
vim /etc/my.conf
[mysqld]
default_storage_engine= InnoDB;
查看庫中所有表使用的存儲引擎
Show table status from db_name;
查看庫中指定表的存儲引擎
show table status like 'tb_name';
show create table tb_name;
設置表的存儲引擎:
CREATE TABLE tb_name(... ) ENGINE=InnoDB;
ALTER TABLE tb_name ENGINE=InnoDB;
MySQL之存儲引擎