Mysql資料庫引擎分析

來源:互聯網
上載者:User

標籤:

先來一篇博文:http://www.jb51.net/article/38004.htm 這篇自我感覺寫的還不錯。大家可以看看。

1.什麼是資料庫引擎

        簡單來說就是資料庫用於儲存、處理和保護資料的核心服務。利用資料庫引擎可控制存取權限並快速處理事務,從而滿足企業內大多數需要處理大量資料的應用程式的要求。使用資料庫引擎建立用於聯機交易處理或線上分析處理資料的關聯式資料庫,這包括建立用於儲存資料的表和用於查看、管理和保護資料安全的資料庫物件。

2.mysql資料庫引擎類型(百度百科)    2.1 ISAM

  ISAM是一個定義明確且曆經時間考驗的資料表格管理方法,它在設計之時就考慮到資料庫被查詢的次數要遠大於更新的次數。因此,ISAM執行讀取操作的速度很快,而且不佔用大量的記憶體和儲存資源。ISAM的兩個主要不足之處在於,它不支援交易處理,也不能夠容錯:如果你的硬碟崩潰了,那麼資料檔案就無法恢複了。如果你正在把ISAM用在關鍵任務應用程式裡,那就必須經常備份你所有的即時資料,通過其複製特性,MYSQL能夠支援這樣的備份應用程式。

    2.2 MYISAM

     MYISAM是MYSQL的ISAM擴充格式和預設的資料庫引擎。除了提供ISAM裡所沒有的索引和欄位管理的大量功能,MYISAM還使用一種表格鎖定的機制,來最佳化多個並發的讀寫操作。其代價是你需要經常運行OPTIMIZE TABLE命令,來恢複被更新機制所浪費的空間。MYISAM還有一些有用的擴充,例如用來修複資料庫檔案的MYISAMCHK工具和用來恢複浪費空間的MYISAMPACK工具。

      MYISAM強調了快速讀取操作,這可能就是為什麼MYSQL受到了WEB開發如此青睞的主要原因:在WEB開發中你所進行的大量資料操作都是讀取操作。所以,大多數虛擬機器主機供應商和INTERNET平台供應商只允許使用MYISAM格式。

   2.3 HEAP

       HEAP允許只駐留在記憶體裡的暫存資料表格。駐留在記憶體使得HEAP比ISAM和MYISAM的速度都快,但是它所管理的資料是不穩定的,而且如果在關機之前沒有進行儲存,那麼所有的資料都會丟失。在資料行被刪除的時候,HEAP也不會浪費大量的空間,HEAP表格在你需要使用SELECT運算式來選擇和操控資料的時候非常有用。要記住,用完表格後要刪除表格。

 

   2.4 INNODB和BERKLEYDB

  INNODB和BERKLEYDB(BDB)資料庫引擎都是造就MYSQL靈活性的技術的直接產品,這項技術就是MySql++ API。在使用MySql的時候,你所面對的每一個挑戰幾乎都源於ISAM和MYIASM資料庫引擎不支援交易處理也不支援外來鍵。儘管要比ISAM和MYISAM引擎慢很多,但是INNODB和BDB包括了對交易處理和外來鍵的支援,這兩點都是前兩個引擎所沒有的。如前所述,如果你的設計需要這些特性中的一者或者兩者,那你就要被迫使用後兩個引擎中的一個了。

3. Innodb引擎

    Innodb引擎提供了對資料庫ACID事務的支援,並且實現了SQL標準的四種隔離等級,關於資料庫事務與其隔離等級

的內容請見資料庫事務與其隔離等級這篇文章。該引擎還提供了行級鎖和外鍵約束,它的設計目標是處理大容量資料

庫系統,它本身其實就是基於MySQL背景完整資料庫系統,MySQL運行時Innodb會在記憶體中建立緩衝池,用於緩

沖資料和索引。但是該引擎不支援FULLTEXT類型的索引,而且它沒有儲存表的行數,當SELECT COUNT(*) FROM

TABLE時需要掃描全表。當需要使用資料庫事務時,該引擎當然是首選。由於鎖的粒度更小,寫操作不會鎖定全表,

所以在並發較高時,使用Innodb引擎會提升效率。但是使用行級鎖也不是絕對的,如果在執行一個SQL語句時

MySQL不能確定要掃描的範圍,InnoDB表同樣會鎖全表。

4. MyIASM引擎

    MyIASM是MySQL預設的引擎,但是它沒有提供對資料庫事務的支援,也不支援行級鎖和外鍵,因此當INSERT(插入)或UPDATE(更新)資料時即寫操作需要鎖定整個表,效率便會低一些。不過和Innodb不同,MyIASM中儲存了表的行數,於是SELECT COUNT(*) FROM TABLE時只需要直接讀取已經儲存好的值而不需要進行全表掃描。如果表的讀操作遠遠多於寫操作且不需要資料庫事務的支援,那麼MyIASM也是很好的選擇。

5. 兩種引擎的選擇

        大尺寸的資料集趨向於選擇InnoDB引擎,因為它支援交易處理和故障恢複。資料庫的大小決定了故障恢複的時間長短,InnoDB可以利用交易記錄進行資料恢複,這會比較快。主鍵查詢在InnoDB引擎下也會相當快,不過需要注意的是如果主鍵太長也會導致效能問題,關於這個問題我會在下文中講到。大批的INSERT語句(在每個INSERT語句中寫入多行,批量插入)在MyISAM下會快一些,但是UPDATE語句在InnoDB下則會更快一些,尤其是在並發量大的時候。

6.Index——索引

    索引(Index)是協助MySQL高效擷取資料的資料結構。MyIASM和Innodb都使用了樹這種資料結構做為索引。

    MyISAM引擎的索引結構為B+Tree,其中B+Tree的資料域儲存的內容為實際資料的地址,也就是說它的索引和實際的資料是分開的,只不過是用索引指向了實際的資料,這種索引就是所謂的非叢集索引。

    Innodb引擎的索引結構同樣也是B+Tree,但是Innodb的索引檔案本身就是資料檔案,即B+Tree的資料域儲存的就是實際的資料,這種索引就是叢集索引。這個索引的key就是資料表的主鍵,因此InnoDB表資料檔案本身就是主索引。因為InnoDB的資料檔案本身要按主鍵聚集,所以InnoDB要求表必須有主鍵(MyISAM可以沒有),如果沒有顯式指定,則MySQL系統會自動選擇一個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則MySQL自動為InnoDB表產生一個隱含欄位作為主鍵,這個欄位長度為6個位元組,類型為長整形。並且和MyISAM不同,InnoDB的輔助索引資料域儲存的也是相應記錄主鍵的值而不是地址,所以當以輔助索引尋找時,會先根據輔助索引找到主鍵,再根據主鍵索引找到實際的資料。所以Innodb不建議使用過長的主鍵,否則會使輔助索引變得過大。建議使用自增的欄位作為主鍵,這樣B+Tree的每一個結點都會被順序的填滿,而不會頻繁的分裂調整,會有效提升插入資料的效率。

Mysql資料庫引擎分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.