我什么时候应该在 PHP 中取消设置以提高性能

When should I unset in PHP to improve performance

我正在使用以下代码:

for ($x = 0; $x < count($response[0]); $x++) { //approx count 50-60

    $t = $response[0][$x];
    $query = "INSERT INTO tableX (time,title) VALUES ('$date','$t')";

    if ($query_run = mysqli_query($mysql_connect, $query)) {

    //Call some functions if the insertion happens

    }
}

mysqli_close($mysql_connect);

table 中的标题是主键。我将仅在插入成功时调用一些函数,即没有提供现有标题。标题和日期来自 csv 文件。

如何提高这段代码的性能?我应该什么时候使用 unset 来节省 CPU 个内存周期?

取消设置不会通过此处任何有意义的指标提高性能。

提高性能的是每次查询更新多行。

让我们以您的代码为例。这只是它如何可能的一个例子。如果您需要 运行 插入后的其他功能,那么您可能希望一次更新 10 或 100 行而不是所有行。

$query = "INSERT INTO tableX (time,title) VALUES ";
$valueQuery = array();

for ($x = 0; $x < count($response[0]); $x++) { //approx count 50-60
    $t = $response[0][$x];
    $valueQuery[] =  "('$date','$t')";
}
$query .= implode(", ",$valueQuery);

if ($query_run = mysqli_query($mysql_connect, $query)) {
    //Call some functions if the insertion happens
}

您可以通过为插入 (1) 使用准备好的语句来改进显示的代码。实际上,在每次迭代中,您首先必须定义 $query 然后执行。在每次执行中,数据库还必须首先解析您的语句。

通过在进入循环之前准备语句,您只需定义一次,就可以使用不同的值执行它。此外,语句只会在准备好时被解析,不会在每次执行时被解析。

这里有一篇关于 php 中的垃圾收集器如何工作的小文章:http://www.hackingwithphp.com/18/1/10, found in this question: Is there garbage collection in PHP?

PHP performs garbage collection at three primary junctures:

When you tell it to

When you leave a function

When the script ends

所以也许你应该检查你的程序有多少可以封装到函数中,尽管在你的代码片段中没有太多可看的。

(1)

我建议使用prepared statements来提高效率。减少工作量是 imo 的最佳实践 - 不必要的查询解析。

所以我没有对实际性能改进的估计,尽管因为这个案例是在谈论 50 到 60 次迭代,即使是值得注意的也是最小的。

这道题完全是基于错误的前提。

首先,在任何地方使用 unset 都不会为您节省一个 CPU 周期,而是会使用它们。

再说反正没地方放unset

最后,此代码没有 真正的 性能问题。如果您遇到任何问题,您应该测量它们,检测真正的瓶颈,然后修复它,而不是四处乱找树。

您真正关心的应该是您的代码对 sql 各种注入和语法错误敞开大门,而不是虚构的性能问题。