我想了解,是统一将一个数据库中的表全部设置为InnoDB引擎好。还是根据需求,将适合InnoDB的表设置为InnoDB引擎,将适合MyISAM的表设置为MyISAM引擎。哪种方式较好。如果一个表中共用两个引擎,对数据库以后的扩展有或性能有影响吗?
比如,仅对后台发布的新闻,前台以读为主的表,我设置为MyISAM引擎。对于商城或会员的一些关联表,要涉及到事务或高并发读写的,设置为InnoDB引擎。这样合理吗?另外,能否给出InnoDB的相关资料。我的mysql在windows2003平台上。
1、如何将MyISAM转为InnoDB
2、关于InnoDB的设置。
3、使用innodb引擎的一些注意事项。
4、额外的一些话题
  我记得在一篇文章说过,为了提高写的性能,将AUTOCOMMIT设置为0。我想问一下,如果将AUTOCOMMIT设置为0,会不会造成其它的不良影响?原文摘录如下:大家可以看到在MySQL 5.0里面,MyISAM和InnoDB存储引擎性能的差别并不是太大,针对InnoDB来说,主要影响性能的是innodb_flush_log_at_trx_commit这个选项,如果设置为1的话,那么每次插入数据的时候都会自动提交,导致性能急剧下降,应该是跟刷新日志有关系,设置为0效率能够看到明显提升,当然,同样你可以SQL中提交“SET AUTOCOMMIT = 0”来设置达到好的性能。另外,还听说通过设置innodb_buffer_pool_size能够提升InnoDB的性能,但是我测试发现没有特别明显的提升。5、我以前一直不敢接触innodb的原因是它不好备份、占用硬盘空间大、涉及配置多,又是什么共享空间,独立空间了,搞的头疼、还因为目前处理的数据比较敏感,不能出错,所以一直没机会尝试。(不敢尝试,怕出问题解决不了)总之对innodb有一点畏惧心理。不过它的事务处理倒非常吸引我。准备要尝试这块。希望能得到朋友的建议及回答。非常感谢。

解决方案 »

  1.   

    这2个引擎的差别还是很大的
    从物理结构
    索引
    事务
    外键
    缓存
    恢复
    备份等方面他们都有一定的差别
    一般不用混合引擎,毕竟差别大了,有些执行标准不一样。
    1、如何将MyISAM转为InnoDB使用ALTER TABLE ... ENGINE=INNODB,或用相同的定义创建一个空InnoDB表,并且用INSERT INTO ... SELECT * FROM ...插入行。
    建议第二种
    2关于InnoDB的设置。
    根据个人实际需求
    3、使用innodb引擎的一些注意事项。
    一言难尽,只有遇到时才知道4、额外的一些话题
      我记得在一篇文章说过,为了提高写的性能,将AUTOCOMMIT设置为0。我想问一下,如果将AUTOCOMMIT设置为0,会不会造成其它的不良影响?是有影响,一般在开发过程中是要将他设置为0的,但是平时没必要,你想如果你的一个测试修改还得手动提交是不是太麻烦了。但是在应用程序中程序员会知道提交事务。但是如果设置为0,在应用程序中如果控制的不好,造成死锁的机会会增多。
      

  2.   

    一个数据库中允许不同的表使用不同的存储引擎。实际上也有很多项目是这样设计的。
    对将来的扩充谈不上什么影响不影响的,毕竟数据库设计完后本身就是个稳定的结构。 当需要改变的时候,从新进行评估。这是一般的选择原则。
    只不过是取消自动提交而已。 既然需要使用事务,那自然应该设置AUTOCOMMIT为无效。
    INNODB没什么不好备份的。定期用 mysqldump 备份,并打开二进制日志即可。
      

  3.   

    是统一将一个数据库中的表全部设置为InnoDB引擎好。还是根据需求根据需求用SP取得所有表名,用ALTER TABLE ... ENGINE=INNODB修改表类型INNODB支持事务、 外键,用 mysqldump 备份既可
      

  4.   

    可以同时存在,但当用到事务时,myisam的表将无效。
      

  5.   

    innodb和myisam对同一个sql语句的优化是不一样的。所以不建议混用。innodb对于高负载下的应用比较好,经常做做备份就行了。
      

  6.   

    你不敢应用innodb的原因不是因为他复杂  是因为你不了解他  了解了innodb的一系列机制以后  你会果断放弃myisam给你的建议就是线上系统不要动  自己先整体学习下mysql 慢慢学习innodb 你会发现innodb能让你随心所欲