我有一张表,每年会增加约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结果。
由于
答案 0 :(得分:0)
通过两次记录,您无法获得任何收益。在mysql fetch循环中完成所有工作。
你唯一不想这样做的是
你在循环中做的事情很昂贵(就时间而言)而你想要关闭语句句柄。
您必须多次浏览数据。