欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL存儲引擎中MyISAM和InnoDB區(qū)別詳解

 更新時間:2016年12月17日 11:43:10   投稿:hebedich  
存儲引擎說白了就是如何存儲數據、如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現(xiàn)方法。因為在關系數據庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)

InnoDB和MyISAM是許多人在使用MySQL時最常用的兩個表類型,這兩個表類型各有優(yōu)劣,視具體應用而定?;镜牟顒e為:MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。MyISAM類型的表強調的是性能,其執(zhí)行數度比InnoDB類型更快,但是不提供事務支持,而InnoDB提供事務支持以及外部鍵等高級數據庫功能。

  以下是一些細節(jié)和具體實現(xiàn)的差別:

  ◆1.InnoDB不支持FULLTEXT類型的索引。
  ◆2.InnoDB 中不保存表的具體行數,也就是說,執(zhí)行select count() from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數即可。注意的是,當count()語句包含 where條件時,兩種表的操作是一樣的。
  ◆3.對于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。
  ◆4.DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。
  ◆5.LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據后再改成InnoDB表,但是對于使用的額外的InnoDB特性(例如外鍵)的表不適用。

  另外,InnoDB表的行鎖也不是絕對的,假如在執(zhí)行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表,例如update table set num=1 where name like “%aaa%”

  兩種類型最主要的差別就是Innodb 支持事務處理與外鍵和行級鎖。而MyISAM不支持.所以MyISAM往往就容易被人認為只適合在小項目中使用。

  作為使用MySQL的用戶角度出發(fā),Innodb和MyISAM都是比較喜歡的,如果數據庫平臺要達到需求:99.9%的穩(wěn)定性,方便的擴展性和高可用性來說的話,MyISAM絕對是首選。

  原因如下:

  1、平臺上承載的大部分項目是讀多寫少的項目,而MyISAM的讀性能是比Innodb強不少的。

  2、MyISAM的索引和數據是分開的,并且索引是有壓縮的,內存使用率就對應提高了不少。能加載更多索引,而Innodb是索引和數據是緊密捆綁的,沒有使用壓縮從而會造成Innodb比MyISAM體積龐大不小。

  3、經常隔1,2個月就會發(fā)生應用開發(fā)人員不小心update一個表where寫的范圍不對,導致這個表沒法正常用了,這個時候MyISAM的優(yōu)越性就體現(xiàn)出來了,隨便從當天拷貝的壓縮包取出對應表的文件,隨便放到一個數據庫目錄下,然后dump成sql再導回到主庫,并把對應的binlog補上。如果是Innodb,恐怕不可能有這么快速度,別和我說讓Innodb定期用導出xxx.sql機制備份,因為最小的一個數據庫實例的數據量基本都是幾十G大小。

  4、從接觸的應用邏輯來說,select count(*) 和order by 是最頻繁的,大概能占了整個sql總語句的60%以上的操作,而這種操作Innodb其實也是會鎖表的,很多人以為Innodb是行級鎖,那個只是where對它主鍵是有效,非主鍵的都會鎖全表的。

  5、還有就是經常有很多應用部門需要我給他們定期某些表的數據,MyISAM的話很方便,只要發(fā)給他們對應那表的frm.MYD,MYI的文件,讓他們自己在對應版本的數據庫啟動就行,而Innodb就需要導出xxx.sql了,因為光給別人文件,受字典數據文件的影響,對方是無法使用的。

  6、如果和MyISAM比insert寫操作的話,Innodb還達不到MyISAM的寫性能,如果是針對基于索引的update操作,雖然MyISAM可能會遜色Innodb,但是那么高并發(fā)的寫,從庫能否追的上也是一個問題,還不如通過多實例分庫分表架構來解決。

  7、如果是用MyISAM的話,merge引擎可以大大加快應用部門的開發(fā)速度,他們只要對這個merge表做一些select count(*)操作,非常適合大項目總量約幾億的rows某一類型(如日志,調查統(tǒng)計)的業(yè)務表。

  當然Innodb也不是絕對不用,用事務的項目就用Innodb的。另外,可能有人會說你MyISAM無法抗太多寫操作,但是可以通過架構來彌補。

相關文章

  • 用Jena將本體文件存入MySQL數據庫的實現(xiàn)方法

    用Jena將本體文件存入MySQL數據庫的實現(xiàn)方法

    以下的文章主要介紹的是使用Jena,將本體文件存入MySQL數據庫的實際操作步驟
    2010-06-06
  • MySQL中的數據加密解密安全技術教程

    MySQL中的數據加密解密安全技術教程

    在數據庫應用程序中,數據的安全性是至關重要的,MySQL作為一種常用的關系型數據庫管理系統(tǒng),也提供了一些數據加密和解密的技巧來保護敏感數據的安全性,為了保護敏感數據免受未經授權的訪問,我們可以使用加密和解密技術
    2024-01-01
  • MySQL8.0設置redo緩存大小的實現(xiàn)

    MySQL8.0設置redo緩存大小的實現(xiàn)

    本文主要在MySQL 8.0.30及之后版本中使用innodb_redo_log_capacity參數在線更改redo緩存文件大小,下面就來介紹一下,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • mysql 鎖表鎖行語句分享(MySQL事務處理)

    mysql 鎖表鎖行語句分享(MySQL事務處理)

    下面這個語句是鎖定一行數據,開始讀取,一直到刪除后都不會有第二個人也讀到這條數據
    2011-09-09
  • mybatis分頁插件pageHelper詳解及簡單實例

    mybatis分頁插件pageHelper詳解及簡單實例

    這篇文章主要介紹了mybatis分頁插件pageHelper詳解及簡單實例的相關資料,需要的朋友可以參考下
    2017-05-05
  • 基于python的mysql復制工具詳解

    基于python的mysql復制工具詳解

    python-mysql-replication 是基于python實現(xiàn)的 MySQL復制協(xié)議工具,我們可以用它來解析binlog 獲取日志的insert,update,delete等事件 ,并基于此做其他業(yè)務需求。這篇文章主要介紹了基于python的mysql復制工具,需要的朋友可以參考下
    2019-06-06
  • MYSQL清空表和截斷表問題

    MYSQL清空表和截斷表問題

    這篇文章主要介紹了MYSQL清空表和截斷表問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • innodb系統(tǒng)表空間維護方法

    innodb系統(tǒng)表空間維護方法

    下面小編就為大家?guī)硪黄猧nnodb系統(tǒng)表空間維護方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • mysql報錯1267?-?Illegal?mix?of?collations問題的解決方法

    mysql報錯1267?-?Illegal?mix?of?collations問題的解決方法

    這篇文章主要介紹了mysql報錯1267?-?Illegal?mix?of?collations問題的解決方法,解決這個問題的方法是將兩個字符集統(tǒng)一起來,文中介紹了好幾種解決的辦法,需要的朋友可以參考下
    2025-01-01
  • MySQL學習之完整性約束詳解

    MySQL學習之完整性約束詳解

    數據完整性指的是數據的一致性和正確性。完整性約束是指數據庫的內容必須隨時遵守的規(guī)則。本文就來為大家講講MySQL中的完整性約束,需要的可以參考一下
    2022-08-08

最新評論