分享

MySQL: MyISAM or InnoDB?(译) - Jiangshachina -...

 chanvy 2009-06-01
通过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数据表就会令你大吃一惊。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多