有时我会收到一个错误,例如“表被标记为已损坏并且需要修复”。 DB(表)正在使用MyISAM。最近这种情况一直在发生。可能是什么原因?最近我正在执行批量插入
INSERT INTO table (..., ..., ...) VALUES (...), (...), (...) ...
所以,我该怎么做才能防止这种情况发生。可能是什么原因。数据库是托管第三方,我该如何调试?
InnoDB是一个更可靠的引擎吗?我听说MyISAM速度更快但其他人说InnoDB也很快,但优化它需要更多。我可以得出结论,InnoDB更可靠,但即使在优化的情况下总体上也会变慢吗?
答案 0 :(得分:3)
如果表损坏,可以使用repair table命令修复它们:
REPAIR TABLE table;
如果在服务器仍在运行时运行myisamchk(并且插入/选择正在访问表),则可能是破坏表的原因。我遇到的大多数腐败问题都是在服务器外部进行操作(复制文件等)时仍在运行。
InnoDB对于只读数据库来说速度较慢,因为它具有MyISAM遗漏的功能(符合ACID,行级锁定)。但是,如果您正在混合使用读取和写入,则根据混合情况,InnoDB可以提供严重的性能改进,因为它不必锁定整个表来执行写入操作。您也不会遇到腐败问题。
答案 1 :(得分:1)
使用InnoDB。
答案 2 :(得分:0)