1. 程式人生 > >MySQL之存儲引擎

MySQL之存儲引擎

tab hive html eat clust nbsp mysql 占用 客戶端

Storage Engine是指表類型,也即在表創建時指明其使用的存儲引擎,同一庫中不同表可以使用不同的存儲引擎,但建議要使用同一種存儲引擎

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或開發人員能夠對一系列相同的

MyISAM表進行邏輯分組,並將它們作為一個對象引用。適用於VLDB(Very Large Data Base)環境,如數據倉庫

Archive :為存儲和檢索大量很少參考的存檔或安全審核信息,只支持SELECTINSERT操作;支持行級鎖和專用緩存區

Federated聯合:用於訪問其它遠程MySQL服務器一個代理,它通過創建一個到遠程MySQL服務器的客戶端連接,並將查詢傳輸到遠程服務器執行,而後完成數據存取,提供鏈接單獨MySQL服務器的能力,以便從多個物理服務器創建一個邏輯數據庫。非常適合分布式或數據集市環境

BDB:可替代InnoDB的事務引擎,支持COMMITROLLBACK和其他事務特性

Cluster/NDBMySQL的簇式數據庫引擎,尤其適合於具有高性能查找要求的應用程序,這類查找需求還要求具有最高的正常工作時間和可用性

CSVCSV存儲引擎使用逗號分隔值格式將數據存儲在文本文件中。可以使用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之存儲引擎