MySQL的EXPLAIN INSERT不可用:如何理解INSERT是否慢?

MySQL's EXPLAIN INSERT unavailable: how to understand if INSERT is slow or not?

最初我试图在我的脚本中查找慢速查询。困扰我的一件事是 INSERT 查询,因为我在 table 中有几个索引(据我所知,在这种情况下插入不会是即时的,因为每次都应该重新计算索引) .

我的托管公司 (siteground) 限制我访问 MySQL 日志以调查查询缓慢的真实情况。所以我需要搜索任何旁路方式来找到问题。

现在我只是在 phpmyadmin 中执行可疑查询并检查查询所用的时间是否正常。

但是我看到了这种方法的一些弱点:

所以换一种方法会好很多。 EXPLAIN 可能是一个很好的解决方案,除非:

所以问题是:

  1. 如果至少有一个索引,INSERT可以变慢吗?

  2. 我可以用EXPLAIN SELECT代替EXPLAIN UPDATEDELETE吗?

  3. 除了提到的 phpmyadmin 执行和 EXPLAIN 之外,还有哪些方法可以用来调查查询速度?

我正在使用 InnoDB 引擎。

INSERT 必须为插入的每一行更新所有索引。但是,对于单行,我们最多谈论毫秒。

INSERT ... SELECT ... 可以插入任意多行 - SELECT 或 INSERT 可能是问题所在。

INSERT ... VALUES (1,2,3), (4,5,6), ...(一个 'batched' 插入)比单个插入更快,但问题不大。

DELETEUPDATE 当然可以触及任意多行,因此非常慢。将它们变成 SELECT,然后做 EXPLAIN SELECT ... 并计时。

如需更具体的帮助,请向我们展示 SHOW CREATE TABLE,告诉我们您有多少 RAM 以及 innodb_buffer_pool_size 的值(应约为可用 RAM 的 70%)。

你的'scripts'是用什么写的?在他们周围放置计时器。例如,在 PHP 中,使用 microtime(true)。在 Perl 中使用 Time::HiRes.