在講存儲引擎以前咱們來作個比喻 : 現實生活中咱們咱們存儲的數據文件有不一樣的類型, 每種文件類型對應各自不一樣的處理機制css
好比一個視屏文件,能夠轉換成mp四、avi、wmv, 一個圖片能夠是png、jpgnode
咱們電腦的磁盤上也會存在不一樣類型的文件系統, Windows裏常見的ntfs、fat32,Linux裏常見的ext三、ext四、xfs等python
數據庫中的表也應該有不一樣的類型, 表的類型不一樣, 會對應mysql不一樣的存取機制, 表類型又稱爲存儲引擎mysql
如同上面的比喻, 雖然一個視頻文件的類型不同, 可是呈現的內容都是同樣的sql
表數據也是這樣, 一張表的數據不管使用什麼存儲引擎, 用戶能看到的數據是同樣的, 不一樣的儲引擎存取, 引擎功能, 佔用空間大小, 讀取性能等可能有區別數據庫
說白了, 存儲引擎就是在如何存儲數據、提取數據、更新數據等技術方法的實現上, 底層的實現方式不一樣, 那麼就會呈現出不一樣存儲引擎有着一些本身獨有的特色和功能, 對應着不一樣的存取機制緩存
因而乎, 用戶在使用的時候根據本身不一樣的業務場景選擇不一樣的存儲引擎, 其中MySQL最經常使用的存儲引擎爲:MyISAM和InnoDB (下面詳細介紹)安全
ps : 在Oracle 和SQL Server等數據庫中只有一種存儲引擎,全部數據存儲管理機制都是同樣的架構
t01.frm # 存放的是表結構 t01.idb # 存放的是 索引 + 數據
t01.frm # 表結構 t01.MYD # MyDaata 存放的是數據 t01.MYI # MyIndex 存放的是索引
t01.frm # 表結構
delete from table
時,InnoDB不會從新創建表,而是一行一行的刪除,在innodb上若是要清空保存有大量數據的表,最好使用truncate table
這個命令2003 年,MySQL AB 公司從 Sony Ericsson 公司收購了 NDB 存儲引擎。 NDB 存儲引擎是一個集羣存儲引擎,相似於 Oracle 的 RAC 集羣,不過與 Oracle RAC 的 share everything 結構不一樣的是,其結構是 share nothing 的集羣架構,所以能提供更高級別的 高可用性。NDB 存儲引擎的特色是數據所有放在內存中(從 5.1 版本開始,能夠將非索引數 據放在磁盤上),所以主鍵查找(primary key lookups)的速度極快,而且可以在線添加 NDB 數據存儲節點(data node)以便線性地提升數據庫性能。因而可知,NDB 存儲引擎是高可用、 高性能、高可擴展性的數據庫集羣系統,其面向的也是 OLTP 的數據庫應用類型。性能
第三方的存儲引擎。其特色是存儲是按照列而非行的,所以很是 適合 OLAP 的數據庫應用。其官方網站是 http://www.infobright.org/,上面有很多成功的數據 倉庫案例可供分析。
網易公司開發的面向其內部使用的存儲引擎。目前的版本不支持事務, 但提供壓縮、行級緩存等特性,不久的未來會實現面向內存的事務支持。
ps : Mysql 支持的存儲引擎很是多, 上面只是常見存儲引擎, 還支持自定義, 也就是本身寫一個
show engines; # 查看安裝的mysql全部支持的存儲引擎 show variables like 'storage_engine%'; # 查看當前正在使用的存儲引擎
create table innodb_t01(id int) engine=innodb; # 末尾指定InnoDB存儲引擎 create table myisam_t02(id int) engine=myisam; # 指定MyISAM存儲引擎 create table memory_t03(id int) engine=memory; # 指定memory存儲引擎 create table blackhole_t04(id int) engine=blackhole; # 指定Blackhole存儲引擎
insert into innodb_t01 values(1),(2); # 插入 ID 1 和 2 ,下同 insert into myisam_t02 values(1),(2); insert into memory_t03 values(1),(2); insert into blackhole_t04 values(1),(2);
select * from innodb_t01; select * from myisam_t02; select * from memory_t03; select * from blackhole_t04; # 注意 : 黑洞
結論 : 對於blackhole類型的表, 往表內插入任何數據, 都至關於丟入黑洞, 表內永遠不存記錄
結論 : 對於memory類型的表,在重啓mysql或者重啓機器後,表內數據清空
下一篇將詳細介紹表的操做