https://blog.csdn.net/cool_wayen/article/details/79585277
數據庫存儲引擎是數據庫底層軟件組織,數據庫管理系統(DBMS)使用數據引擎進行創建、查詢、更新和刪除數據。不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能,使用不同的存儲引擎,還可以 獲得特定的功能。現在許多不同的數據庫管理系統都支持多種不同的數據引擎。MySql的核心就是存儲引擎。
存儲引擎查看
MySQL給開發者提供了查詢存儲引擎的功能,我這里使用的是MySQL5.1,可以使用:
SHOW ENGINES
命令來查看MySQL使用的引擎,命令的輸出為(我用的Navicat Premium):
看到MySQL給用戶提供了這么多存儲引擎,包括處理事務安全表的引擎和出來了非事物安全表的引擎。
如果要想查看數據庫默認使用哪個引擎,可以通過使用命令:
SHOW VARIABLES LIKE 'storage_engine';
來查看,查詢結果為:
在MySQL中,不需要在整個服務器中使用同一種存儲引擎,針對具體的要求,可以對每一個表使用不同的存儲引擎。Support列的值表示某種引擎是否能使用:YES表示可以使用、NO表示不能使用、DEFAULT表示該引擎為當前默認的存儲引擎 。下面來看一下其中幾種常用的引擎。
========================以上是轉載的http://blog.csdn.net/zhangyuan19880606/article/details/51217952=========================
===============我是分割線============
一 Innodb
支持事務,是事務安全的(事務的介紹移駕http://blog.csdn.net/cool_wayen/article/details/78890949),提供行級鎖與外鍵約束,有緩沖池,用於緩沖數據和索引
適用場景:用於事務處理,具有ACID事物支持,應用於執行大量的insert和update操作的表
二 MyISAM
不支持事務,不支持外鍵約束,不支持行級鎖,操作時需要鎖定整張表,不過會保存表的行數,所以當執行select count(*) from tablename時執行特別快
適用場景:用於管理非事務表,提供高速檢索及全文檢索能力,適用於有大量的select操作的表,如 日志表
三 MEMORY
使用存在於內存中的內容創建表,每一個memory只實際對應一個磁盤文件。因為是存在內存中的,所以memory訪問速度非常快,而且該引擎使用hash索引,可以一次定位,不需要像B樹一樣從根節點查找到支節點,所以精確查詢時訪問速度特別快,但是非精確查找時,比如like,這種范圍查找,hash就起不到作用了。另外一旦服務關閉,表中的數據就會丟失,因為沒有存到磁盤中。
適用場景:主要用於內容變化不頻繁的表,或者作為中間的查找表。對表的更新要謹慎因為數據沒有被寫入到磁盤中,服務關閉前要考慮好數據的存儲
四 MERGE
以下是轉載的http://blog.csdn.net/leiyonglin/article/details/7008659
MERGE存儲引擎把一組MyISAM數據表當做一個邏輯單元來對待,讓我們可以同時對他們進行查詢。構成一個MERGE數據表結構的各成員MyISAM數據表必須具有完全一樣的結構。每一個成員數據表的數據列必須按照同樣的順序定義同樣的名字和類型,索引也必須按照同樣的順序和同樣的方式定義。
假設你有幾個日志數據表,他們內容分別是這幾年來每一年的日志記錄項,他們的定義都是下面這樣,YY代表年份:
- CREATE TABLE log_YY
- (
- dt DATETIME NOT NULL,
- info VARCHAR(100) NOT NULL,
- INDEX (dt)
- ) ENGINE = MyISAM;
假設日志數據表的當前集合包括 log_2004、log_2005、log_2006、log_2007 ,而你可以創建一個如下所示的MERGE數據表把他們歸攏為一個邏輯單元:
- CREATE TABLE log_merge
- (
- dt DATETIME NOT NULL,
- info VARCHAR(100) NOT NULL,
- INDEX(dt)
- ) ENGINE = MERGE UNION = (log_2004, log_2005, log_2006, log_2007);
ENGINE選項的值必須是MERGE,UNION選項列出了將被收錄在這個MERGE數據表離得各有關數據表。把這個MERGE創建出來后,就可以像對待任何其他數據表那樣查詢它,只是每一次查詢都將同時作用與構成它的每一個成員數據表 。下面這個查詢可以讓我們知道上述幾個日志數據表的數據行的總數:
- SELECT COUNT(*) FROM log_merge;
下面這個查詢用來確定在這幾年里每年各有多少日志記錄項:
- SELECT YEAR(dt) AS y, COUNT(*) AS entries FROM log_merge GROUP BY y;
除了便於同時引用多個數據表而無需發出多條查詢,MERGE數據表還提供了以下一些便利。
- MERGE數據表可以用來創建一個尺寸超過各個MyISAM數據表所允許的最大長度邏輯單元
- 你看一把經過壓縮的數據表包括到MERGE數據表里。比如說,在某一年結束之后,你應該不會再往相應的日志文件里添加記錄,所以你可以用myisampack工具壓縮它以節省空間,而MERGE數據表仍可以像往常那樣工作