John Jiang

          a cup of Java, cheers!
          https://github.com/johnshajiang/blog

             :: 首頁 ::  :: 聯系 :: 聚合  :: 管理 ::
            131 隨筆 :: 1 文章 :: 530 評論 :: 0 Trackbacks
          MySQL: MyISAM or InnoDB?
          通過JavaLobby看到的一篇博文,為選擇MySQL的數據表引擎提供了一些意見,希望對大家有幫助。(2009.05.31最后更新)
          我這個可愛的小哥哥祝可愛的小朋友們節日愉快 ^_^

              MyISAM是MySQL的默認存儲引擎,但很多人忘記還有其它的選擇。決定使用哪種(哪些)存儲引擎可能需要些技巧,但評估一下MyISAM是否適合你的需要還是值得的。有一組存儲引擎可用,但我將只關注MyISAM和InnoDB,因為它們被用的最多。
          需考慮的問題:
              你是否需要外鍵?
              你是否需要事務?
              你是否需要全文索引?
              你的數據訪問(查詢)模式是什么?
              你的數據集有多大?

              思考上述問題將使你走入正確的方向,但有些例外。如果你使用事務或外鍵,就使用InnoDB。要使用全文索引,你常需選擇MyISAM,因為它內建地支持這一特性;但是,MyISAM難以應對超過200萬的數據行。你可以使用Sphinx以使你的InnoDB表能獲取全文索引,但這需要花費一些時間。
              數據集的大小是決定你使用哪種引擎的主要因素。由于InnoDB的事務和崩潰恢復特性,對于較大的數據集,則傾向于該引擎。然而,恢復MyISAM數據表所花費的時間由數據集的大小來衡量,但恢復InnoDB所花費的時間由事務日志的大小來衡量-而你對日志有一定的控制力。例如,相較于恢復 InnoDB數據表所需要的幾分鐘,你可能需要幾小時甚至幾天時間來恢復MyISAM數據表。
              你讀/寫數據表的方式可能會極大地影響你所使用的存儲引擎的性能。在MyISAM數據表中執行COUNT()會很快,但對于InnoDB數據表則十分痛苦,最好避免。在InnoDB數據表中查找主鍵極其的快,但要注意到,太長的主鍵會影響到性能。批量插入在MyISAM數據表更快些,但批量更新在 InnoDB中會較快些--特別是當進行并發增加時。
              那么你應該選擇哪種引擎呢?如果你工作在一個小項目中,那么MyISAM可能正適合你。甚至在較大環境中使用MyISAM也能獲取很大的成功,但這依具體情況不同而不同。如果你計劃用于非常大的數據集,并且需要事務或外鍵約束,那就應該直接使用InnoDB。但需要記住,相較于MyISAM,InnoDB 數據表需要很大的內存和存儲空間。將100GB的MyISAM數據表轉化成InnoDB數據表就會表現得令人吃驚的壞。

          posted on 2009-05-31 21:41 John Jiang 閱讀(1817) 評論(2)  編輯  收藏 所屬分類: DatabaseMySQL

          評論

          # re: MySQL: MyISAM or InnoDB?(譯) 2009-06-01 10:06 HiMagic!
          "將100GB的MyISAM數據表轉化成InnoDB數據表就會令你大吃一驚。"
          -- 會差多少倍?  回復  更多評論
            

          # re: MySQL: MyISAM or InnoDB?(譯) 2009-06-01 17:54 Sha Jiang
          @HiMagic!
          我不知道 *_*  回復  更多評論
            

          主站蜘蛛池模板: 双辽市| 兴安盟| 盖州市| 清镇市| 报价| 海南省| 汕尾市| 江都市| 保康县| 巴马| 阿拉善盟| 浦县| 梁平县| 旬邑县| 皋兰县| 沧州市| 沁源县| 平顺县| 阿拉尔市| 同心县| 乐都县| 晴隆县| 金塔县| 化州市| 灯塔市| 瑞丽市| 临朐县| 云林县| 乐昌市| 襄垣县| 新蔡县| 文化| 富顺县| 金秀| 东乌珠穆沁旗| 通榆县| 神木县| 垦利县| 丹巴县| 双柏县| 莫力|