我有一张表,每年将增加大约 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结果。
谢谢