优化mysql数据库 - myISAM db

时间:2010-09-29 13:56:45

标签: mysql insert innodb myisam

我有两个关于使用MyISAM引擎的数据库msyql性能的问题:

1)什么是解决问题的聪明方法,当INSERT或UPDATE一个表中的某些行时,许多SELECT查询都会挂起。

2)这是否很容易从MyISAM更改为InnoDB,数据库是否正在运行?

3)当InnoDB很好时,为什么myISAM仍然是mySQL的默认选项,因为它提供了行级锁定?

4)设计数据库时遇到一个问题,如下图所示:

  • 我有一张桌子有很多“帖子”。

  • 我想给一个“发布”一个观点编号,每次人们在网站上查看帖子时都会增加。

  • 因此,如果我将“查看”字段放在“帖子”表格上,则会在访问者访问此帖子时运行查询“更新帖子设置视图=视图+ 1”。这会使此行上的其他选择查询挂起。

  • 如果我将“视图”字段放在其他TABLE上,我仍然会遇到此问题,因为当我在网站上显示帖子时,我仍然需要使用内部联接查询来查看此帖子的视图编号。如果运行更新视图查询,则此查询仍然存在。

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:0)

你几乎所有的问题都已经知道了这些问题, 切换到InnoDB

首先检查您是否获得了InnoDB支持。在您的mysql服务器上执行以下查询:

  

SHOW VARIABLES LIKE'has_innodb';

如果获得值“YES”,则可以使用以下SQL查询更改要更改的每个表:

  

ALTER TABLE [tablename] ENGINE = InnoDB;

(先备份)

在未来版本中,MySQL将切换到InnoDB作为默认存储引擎。但由于传统设置,这一点没有改变

答案 1 :(得分:0)

Jaydee建议将MyISAM和InnoDB混合使用是一个很好的建议。您可以将“views”表设为InnoDB表,并且不应在写入期间阻止读取。

或者,您可以在InnoDB中创建主表的副本,同步它们(触发器,两次写入,必要的任何内容),然后将它们切换出来。与ALTER TABLE...相比,这将减少停机时间,但需要更多工作。