MySQL數據庫存儲引擎學習

文章出處:http://blog.csdn.net/hewei0241/article/details/23868277


1.什麼是存儲引擎 

 

MySQL中的數據用各種不同的技術存儲在文件(或者內存)中,這些技術中的每一種技術都使用不同的存儲機制、索引技巧、鎖定水平並最終提供不同的功能和能力,這些不同的技術以及配套的相關功能在MySQL中稱爲存儲引擎(也稱爲表類型)。

MySql支持多個存儲引擎,包括處理事務安全表的引擎和處理非事務安全表的引擎:

  • ISAM是一個定義明確且歷經時間考驗的數據表格管理方法,它在設計之時就考慮到數據庫被查詢的次數要遠大於更新的次數。因此,ISAM執行讀取操作的速度很快,而且不佔用大量的內存和存儲資源。ISAM的兩個主要不足之處在於,它不支持事務處理,也不能夠容錯:如果你的硬盤崩潰了,那麼數據文件就無法恢復了。
  • MyISAM管理非事務表,是ISAM的擴展格式。除了提供ISAM裏所沒有的索引和字段管理的大量功能,MyISAM還使用一種表格鎖定的機制,來優化多個併發的讀寫操作。它提供高速存儲和檢索,以及全文搜索能力,受到web開發的青睞。MyISAM在所有MySQL配置裏被支持,它是默認的存儲引擎。
  • MEMORY存儲引擎提供“內存中”表,被正式確定爲HEAP引擎,也處理非事務表。HEAP允許只駐留在內存裏的臨時表格。駐留在內存裏讓HEAP要比ISAM和MyISAM都快,但是它所管理的數據是不穩定的,而且如果在關機之前沒有進行保存,那麼所有的數據都會丟失。在數據行被刪除的時候,HEAP也不會浪費大量的空間。HEAP表格在你需要使用SELECT表達式來選擇和操控數據的時候非常有用。要記住,在用完表格之後就刪除表格。
  • InnoDB和BDB(BerkleyDB)存儲引擎提供事務安全表。儘管要比ISAM和MyISAM引擎慢很多,但是InnoDB和BDB包括了對事務處理和外鍵的支持,這兩點都是前兩個引擎所沒有的。
  • NDB Cluster是被MySQLCluster用來實現分割到多臺計算機上的表的存儲引擎,當前只被Linux, Solaris和Mac OS X支持。


2.如何更換引擎?


Globle:一種最簡單的方法就是更改服務器配置,直接將其設置成你所需要的引擎。這個在win下通過更改服務器安裝目錄下的mysql.ini或my.ini中的default-storage-engine項即可,也可以通過運行MySQL ServerInstance Configuration Wizard做簡單的設置。

PerTable:除了全局的方法外,還有一種更靈活的配置方法,那就是按表來設置引擎,這樣我們就可以把那些需要用到事務處理的表設置成InnoDB,其他設置成MyISAM,將性能提升到極致,設置方法也比較簡單:

創建一個新表時,可以通過在CREATE語句中ENGINE或TYPE選項來告訴MySQL要創建什麼類型的表:
CREATE TABLE t (i INT) ENGINE = INNODB;
CREATE TABLE t (i INT) TYPE = MEMORY;

如果省略掉ENGINE或TYPE選項,默認的存儲引擎被使用。當MySQL被用MySQL配置嚮導安裝在Windows平臺上,InnoDB存儲引擎替代MyISAM存儲引擎作爲默認。當不可用的類型被指定時,自動用InnoDB表來替代。

還可以把表從一個類型轉到另一個類型,使用ALTERTABLE語句:
ALTER TABLE t ENGINE = MYISAM;
ALTER TABLE t TYPE = BDB;

當不清楚當前數據庫中各表的引擎時可以使用SHOW TABLE STATUS FROMDBname來查看。

 

3.如何選擇存儲引擎?


關於這個問題,我們需要考慮每個存儲引擎提供了哪些不同的核心功能,一般把這些核心功能分爲4類:支持的字段和數據類型、鎖定類型、索引和事務處理。

  • 支持的字段和數據類型
    雖然所有這些引擎都支持通用的數據類型,例如整型、實型和字符型等,但是,並不是所有的引擎都支持其它的字段類型,特別是BLOG(二進制大對象)或者TEXT文本類型。
  • 鎖定類型
    鎖定機制主要是爲了防止多個處理同時更新同一個數據。不同的存儲引擎支持不同級別的鎖定:表鎖定、頁鎖定和行鎖定。
    表鎖定:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低。支持最多的就是表鎖定,MyISAM和MEMORY支持這種鎖定。MySQL的表級鎖有兩種模式:表共享讀鎖和表獨佔寫鎖。對MyISAM表的讀操作,不會阻塞其他用戶對同一表的讀請求,但會阻塞對同一表的寫請求;對MyISAM表的寫操作,則會阻塞其他用戶對同一表的讀和寫操作;MyISAM表的讀操作與寫操作之間,以及寫操作之間是串行的!
    行鎖定:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。InnoDB表進行行級鎖定。
    頁鎖定:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般。BerkeleyDB引擎支持頁鎖定。
  • 索引
    建立索引在搜索和恢復數據庫中的數據的時候能夠顯著提高性能。不同的存儲引擎提供不同的製作索引的技術。有些存儲引擎根本不支持索引。
  • 事務處理
    事務處理功能通過提供在向表中更新和插入信息期間的可靠性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章