0

我有一张表,每年将增加大约 500,000 行。

我有一个查询来选择 value1 和 value2 之间的行,它将输出 100 到 4000 行。每行有 5 列,小数据(id 字段和 lat long)。

我之前使用 mysql 直接在需要它的代码中编写了这个,并使用了一个 while 循环来处理和打印查询返回的每一行。

我正在使用准备好的语句从 mysql 更改为 mysqli (如果重要,则使用程序)。在这个“转换”期间,我正在整理查询的代码生成函数,因为它们重复了很多次,所以我将它们包含在一个 functions.php 文件中。

正因为如此,我现在不是直接在代码中逐行处理mysql结果,而是将查询中的所有行放入一个数组中,然后从函数中返回,并在代码中一一循环需要的地方。

供参考的代码位:

function...
...
        mysqli_stmt_bind_result($stmt,
        $id,
        $heading,
        $journey,
        $lat,
        $lon);

$map_array = array();
$n=0;
           while (mysqli_stmt_fetch($stmt)) {


               //output to array
               $map_array[$n]['id'] = $id;
               $map_array[$n]['heading'] = $heading;
               $map_array[$n]['journey'] = $journey;
               $map_array[$n]['lat'] = $lat;
               $map_array[$n]['lon'] = $lon;
$n=$n+1;
}
return $map_array;
}

然后我必须遍历数组并在代码中处理它。

与我的旧方式相比:

$lasthead ='0';
while ($row=mysql_fetch_array($result)){
$lat = $row['lat'];
$lon = $row['lon'];
$id = $row['id'];
$heading = $row['heading'];
$journey = $row['journey'];

$doprint='1';
if ($journey =='2' && $heading !==''){
    $maxvar = max($heading, $lasthead);
    $minvar = min($heading, $lasthead);
    $headdiff = $maxvar - $minvar;
    if ($headdiff < 1.5)  { $doprint = '0'; }  
}
if ($doprint =='1'){ print "new google.maps.LatLng($lat, $lon),\n";}

$doprint='1';
$lasthead = $heading;
$heading ='';
}

问题。将所有结果加载到数组中,然后处理数组在性能方面是个坏主意吗?vs一个while循环按行处理mysql结果。

谢谢

4

1 回答 1

0

通过两次查看记录,您不会获得任何收益。在 mysql fetch 循环中完成所有工作。

唯一不想这样做的时候是

  1. 您在循环中所做的事情很昂贵(就时间而言)并且您想要关闭语句句柄。

  2. 您必须多次浏览数据。

于 2013-05-24T16:58:08.190 回答