如何正确测试查询性能

时间:2009-09-24 09:22:28

标签: php mysql optimization

我有一个函数,它接受一个I​​D数组或一个单数ID作为参数。如果传递了数组,则会在逗号上进行内爆,以使ID查询友好。

此函数内部有一个查询,用于更新已传递的ID的记录。

查询如下:

"UPDATE tbl_name SET enabled = 1 WHERE ID IN (" . $IDs . ")";

现在,我想知道使用上面的数据查询是否存在性能问题,例如:

"UPDATE tbl_name SET enabled = 1 WHERE ID = " . $IDs;

如果只传递一个ID。

我在MySQL查询浏览器中测试了相同ID的两个查询,并且两个查询的性能均为.02秒 - 这是性能上的一个微不足道的差异。

只是在查询浏览器中测试两个是否可以检查最佳查询性能?

如果没有必要,我只是想在一个函数中使用两个查询来污染我的代码。

4 个答案:

答案 0 :(得分:1)

我会丢失第二个查询,只留下第一个查询,使代码更具可读性和可维护性。

if (is_array($id)) $id = implode(',', $id);
$query = 'UPDATE table SET marked = 1 WHERE id IN ('.$id.')';

这样你就会得到以下任何一个示例查询:

UPDATE table SET marked = 1 WHERE id IN (15);
UPDATE table SET marked = 1 WHERE id IN (21,12,15,16);

以下是MySQL手册中关于运算符IN的用法的说明:

  

如果所有值都是常量,则根据expr的类型对其进行求值并进行排序。然后使用二分搜索完成对项目的搜索。这意味着如果IN值列表完全由常量组成,则IN非常快。

我还建议“不要修复没有损坏的东西”,最好注意编写一个干净,可读和可维护的代码,因为你的时间比服务器的时间更有价值,特别是如果它是一毫秒或者减。首先看看应用程序的性能,如果它没关系,那么你已经完成了 - 继续你可以用你的时间做的其他事情。如果它很慢 - 测量它(简单的时间测量将会),以确定 的速度,然后只优化它。通常什么是缓慢的是从许多具有大量连接的表中选择一些大的混乱,但不是像这样的简单更新。另外请记住,更新(通常)很少,用户可以等待它们,因此请专注于优化选择。

答案 1 :(得分:1)

如果你想在cpu周期上节俭,并希望性能与IN一致。 可以这样想..你必须把10件物品带到邻居家里......这会更快吗?同时采取所有10个或逐个进行...即使它是一毫秒,当与实例数相乘时,它将变得重要。

想象一下当你向mysql发送一个查询时会在后台发生什么,mysql引擎需要编译每个查询然后处理它并且不要忘记PHP必须通过网络进行通信以将你的查询发送到mysql的部分。

因此,如果您发送的是10个查询而不是1个...则将处理时间相乘。这正是“视图”比标准选择语句更快的原因。

答案 2 :(得分:0)

您可以尝试在随机ID的大循环中运行两个查询

答案 3 :(得分:0)

这就是我要使用的......当我需要更新我的mysql时,这是我通常使用的。

"UPDATE tbl_name SET enabled = 1 WHERE ID = " . $IDs;

但如果你真的想比较这个2 ..我建议你给他们很多身份s o proccess and then you will know which one is the best.. for a single id the preformance is the same.. but i don认为100 id的表现会是一样的。请告诉我结果。谢谢