存儲引擎
1. 定義
存儲引擎說白了就是如何存儲數據、如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現方法。因為在關系數據庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)。
在Oracle 和SQL Server等數據庫中只有一種存儲引擎,所有數據存儲管理機制都是一樣的。而MySql數據庫提供了多種存儲引擎。用戶可以根據不同的需求為數據表選擇不同的存儲引擎,用戶也可以根據自己的需要編寫自己的存儲引擎。
2. 存儲引擎的類型及特點
引擎名稱 |
優點 |
缺陷 |
應用場景 |
MyISAM |
獨立於操作系統,這說明可以輕松地將其從Windows服務器移植到Linux服務器 |
不支持事務/行級鎖/外鍵約束 |
適合管理郵件或Web服務器日志數據 |
InnoDB |
健壯的事務型存儲引擎;支持事務/行級鎖/外鍵約束自動災難恢復/AUTO_INCREMENT |
|
需要事務支持,並且有較高的並發讀取頻率 |
MEMORY |
為得到最快的響應時間,采用的邏輯存儲介質是系統內存 |
當mysqld守護進程崩潰時,所有的Memory數據都會丟失;不能使用BLOB和TEXT這樣的長度可變的數據類型 |
臨時表 |
MERGE |
是MyISAM類型的一種變種。合並表是將幾個相同的MyISAM表合並為一個虛表 |
|
常應用於日志和數據倉庫 |
ARCHIVE |
歸檔的意思,支持索引,擁有很好的壓縮機制 |
僅支持插入和查詢功能 |
經常被用來當做倉庫使用 |
詳細請參考:
http://blog.csdn.net/codepen/article/details/46678725
http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html#commentform
索引
Nomal:
沒什么好說的
Unique:
列值不能有重復,主鍵就是一種特殊的唯一索引
Full Text:
用於全文檢索,僅可用在MyISAM/InnoDB引擎表格的char、varchar和text的字段上
創建:
CREATE TABLE article (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT(title, body)
) TYPE=MYISAM;
使用:
--單列,單詞
SELECT * FROM `student` WHERE MATCH(`name`) AGAINST('聰')
--多列,多詞
SELECT * FROM `student` WHERE MATCH(`name`,`address`) AGAINST('聰 廣東')
--用IN BOOLEAN MODE即可以避開50%的門檻限制。
SELECT * FROM `student` WHERE MATCH(`name`) AGAINST('聰' IN BOOLEAN MODE)
---------------------------------
B-Tree索引:
B-Tree 索引是 MySQL 數據庫中使用最為頻繁的索引類型,除了 Archive 存儲引擎之外的其他所有的存儲引擎都支持 B-Tree 索引。B-Tree 索引的物理文件大多都是以 Balance Tree 的結構來存儲的,也就是所有實際需要的數據都存放於 Tree 的 Leaf Node ,而且到任何一個 Leaf Node 的最短路徑的長度都是完全相同的。
Hash索引:
將索引字段轉化為hashcode,在對hashcode進行排序。僅支持Memory引擎。