php - 如何正确测试查询性能

标签 php mysql optimization

我有一个函数,它接受 ID 数组或单个 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 测试了两个查询,两个查询的性能均为 0.02 秒 - 性能上的微小差异。

在查询浏览器中简单地测试两者是否是检查最佳查询性能的好方法?

只是我不想在没有必要的情况下在一个函数中使用两个查询来污染我的代码。

最佳答案

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

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 手册中关于 operator IN 用法的描述:

If all values are constants, they are evaluated according to the type of expr and sorted. The search for the item then is done using a binary search. This means IN is very quick if the IN value list consists entirely of constants.

我还建议“不要修复未损坏的东西”,最好注意编写干净、可读和可维护的代码,因为你的时间比服务器的时间更有值(value),尤其是在毫秒或较少的。首先查看应用程序的性能,如果没问题,那么您就完成了 - 继续您可以花时间做的其他事情。如果它很慢 - 测量它(简单的时间测量就可以)以查明什么慢,然后只优化它。通常缓慢的是从大量具有大量连接的表中进行一些大而困惑的选择,而不是像这样的简单更新。另请记住,更新(通常)很少见,用户可以等待它们,因此请专注于优化选择。

关于php - 如何正确测试查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1470604/

相关文章:

Mysql统计,返回所有字段,如果没有统计则返回0

php - Laravel 使用 on 子句模型名称与多态数据透视表连接

c++ - 二维函数最小化算法或 C/C++ 库

php - 如何简化我的国家选择菜单 PHP/mysql

php - TCP 连接使用套接字返回错误结果

mysql - 从 FROM_UNIXTIME 转换负值

performance - matlab:有效计算圆形邻域内的局部直方图

php - 一个查询中的许多事情。是否可以?

php - 如何在连接表时计算行数

MySQL 通过 Id 和超字符串的组合进行选择