我最近将数据库表从 MYISAM 切换到 INNODB ,并且遇到查询错误超时,主要是插入。我之前使用的一个函数花了大约2秒来插入,删除和更新~30个MYISAM表中的大量记录集,但现在它们是INNODB,该函数会导致PHP超时。
超时设置为60秒。我已经足够优化了我的脚本,现在,即使仍有很多查询,它们被组合在一起(多次插入,多次删除等),脚本现在需要大约25秒,这比看起来大大增加了至少60秒。
以前使用MYISAM时,这个持续时间仍然快了10倍,我处理这些查询的方式是否有任何错误?或者是否有任何可以帮助提高性能的设置?目前MySQL正在使用默认的安装设置。
查询没有什么特别之处,DELETE ... WHERE ...
简单逻辑,与INSERT
和UPDATE
查询相同。
答案 0 :(得分:2)
很难说不了解您的环境太多,但这可能更像是数据库调优问题。 InnoDB在预算硬件上非常慢,每次写入都会强制进行真正的刷新。 (这会影响写入,而不会影响。)
例如,您可能想要阅读以下选项:
innodb_flush_log_at_trx_commit=2
sync_binlog=0
通过避免刷新,您可以大大加快应用程序的运行速度,但如果服务器崩溃,可能会造成潜在的数据丢失。
如果数据丢失是您绝对无法忍受的,那么另一种选择是使用更好的硬件。
答案 1 :(得分:1)
为每个查询运行explain
。也就是说,如果慢查询为select foo from bar;
,请运行explain select foo from bar;
。
检查计划,并根据需要添加索引。重新运行说明,并确保使用索引。
答案 2 :(得分:0)
Innodb构建哈希索引,通过传递BTREE索引和使用哈希来加快索引查找速度,这更快