我有两个关于使用MyISAM引擎的数据库msyql性能的问题:
1)什么是解决问题的聪明方法,当INSERT或UPDATE一个表中的某些行时,许多SELECT查询都会挂起。
2)这是否很容易从MyISAM更改为InnoDB,数据库是否正在运行?
3)当InnoDB很好时,为什么myISAM仍然是mySQL的默认选项,因为它提供了行级锁定?
4)设计数据库时遇到一个问题,如下图所示:
我有一张桌子有很多“帖子”。
我想给一个“发布”一个观点编号,每次人们在网站上查看帖子时都会增加。
因此,如果我将“查看”字段放在“帖子”表格上,则会在访问者访问此帖子时运行查询“更新帖子设置视图=视图+ 1”。这会使此行上的其他选择查询挂起。
如果我将“视图”字段放在其他TABLE上,我仍然会遇到此问题,因为当我在网站上显示帖子时,我仍然需要使用内部联接查询来查看此帖子的视图编号。如果运行更新视图查询,则此查询仍然存在。
抱歉我的英语不好。
答案 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...
相比,这将减少停机时间,但需要更多工作。