日期:2014-05-16  浏览次数:20795 次

mysql数据库,一个名为test的数据库中可否将有的表设置为InnoDB,有的表设置为MyISAM
我想了解,是统一将一个数据库中的表全部设置为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有一点畏惧心理。不过它的事务处理倒非常吸引我。准备要尝试这块。

希望能得到朋友的建议及回答。非常感谢。


------解决方案--------------------
这2个引擎的差别还是很大的
从物理结构
索引
事务
外键
缓存
恢复
备份等方面他们都有一定的差别


一般不用混合引擎,毕竟差别大了,有些执行标准不一样。
1、如何将MyISAM转为InnoDB

使用ALTER TABLE ... ENGINE=INNODB,或用相同的定义创建一个空InnoDB表,并且用INSERT INTO ... SELECT * FROM ...插入行。
建议第二种
2关于InnoDB的设置。
根据个人实际需求
3、使用innodb引擎的一些注意事项。
一言难尽,只有遇到时才知道

4、额外的一些话题
  我记得在一篇文章说过,为了提高写的性能,将AUTOCOMMIT设置为0。我想问一下,如果将AUTOCOMMIT设置为0,会不会造成其它的不良影响?

是有影响,一般在开发过程中是要将他设置为0的,但是平时没必要,你想如果你的一个测试修改还得手动提交是不是太麻烦了。但是在应用程序中程序员会知道提交事务。但是如果设置为0,在应用程序中如果控制的不好,造成死锁的机会会增多。
------解决方案--------------------
一个数据库中允许不同的表使用不同的存储引擎。实际上也有很多项目是这样设计的。
对将来的扩充谈不上什么影响不影响的,毕竟数据库设计完后本身就是个稳定的结构。 当需要改变的时候,从新进行评估。

引用比如,仅对后台发布的新闻,前台以读为主的表,我设置为MyISAM引擎。对于商城或会员的一些关联表,要涉及到事务或高并发读写的,设置为InnoDB引擎。这样合理吗?

------解决方案--------------------
是统一将一个数据库中的表全部设置为InnoDB引擎好。还是根据需求

根据需求

用SP取得所有表名,用ALTER TABLE ... ENGINE=INNODB修改表类型

INNODB支持事务、 外键,用 mysqldump 备份既可
------解决方案--------------------
可以同时存在,但当用到事务时,myisam的表将无效。
------解决方案--------------------
innodb和myisam对同一个sql语句的优化是不一样的。所以不建议混用。innodb对于高负载下的应用比较好,经常做做备份就行了。
------解决方案--------------------
你不敢应用innodb的原因不是因为他复杂 是因为你不了解他

了解了innodb的一系列机制以后 你会果断放弃myisam



给你的建议就是线上系统不要动 自己先整体学习下mysql 慢慢学习innodb 你会发现innodb能让你随心所欲