2016-10-22 102 views
0

我有下面的代码,其中,我使用一个循环内的循环来创建一个PHP数组:遍历一个PHP数组比遍历MySQLi关联数组更好吗?

$result= mysqli_query($myqueri1); 
    while($row = mysqli_fetch_assoc($result)) 

    { 

    $result1=mysqli_query($myqueri2); //This query utilizes a variable obtained from the outer loop. So this cant be written outside the loop. 
    while($row = mysqli_fetch_assoc($result)) 
    { 

    //Operations 
    } 

    } 

两个数组包含几乎50,000列。他们被索引。

但是,我更关心优化问题。如果我将循环1的所有结果存储到一个PHP数组中,然后遍历它,它有什么区别吗?或者正在使用while($row = mysqli_fetch_assoc($result))与通过常见的PHP循环相同?哪个更优化?

回答

0

如果您正在使用mysqli_query(),且其默认标志MYSQLI_STORE_RESULT您已将整个结果集从数据库传输到您的应用程序中。请参阅http://php.net/manual/en/mysqli.query.php具体说明result_mode标志和mysqli_store_result() vs. mysqli_use_result()以更好地解释标志的作用。

这意味着,如果您首先使用它填充一个php数组或者只是继续做现在正在做的事情,那么您的情况下外层循环在性能上应该没有太大差别。

您可以在这里做出的巨大性能差异是,如果它完全可能将第二个内部循环查询合并到第一个查询的某种连接中。

向循环内的数据库发送多个查询是需要时间的。

1

与访问数组元素相比,数据库访问速度较慢。但是,如果数组来自数据库访问,则应该没有太大的区别。

我怀疑你的说法“所以这个不能写在循环之外。”例如

for ($i = 0; $i < 3, ++$i) { 
    mysqli_query("SELECT foo FROM bar WHERE id = $i"); 
} 

可以写成

mysqli_query("SELECT foo FROM bar WHERE id IN (0, 1, 2)"); 

与所有优化:优化你之前,找出瓶颈。优化后,确认瓶颈实际上已经消失。

1

如果我环路1的所有reults存储到一个PHP数组,然后遍历它,

...那么你会遍历两次

Whihc更优化?

运行循环一次比运行循环两次更优化。所以它会让你的问题更接近算术,而不是最优化。

但是,我更关心优化问题。

然后,你必须使用在第一个查询JOIN,并得到所有数据而没有嵌套查询的。