$ res包含大约488k行,整个循环需要61s!每个周期超过1.25ms!什么时候需要什么?为什么这个循环通过mysql结果集很慢? (每周期1.4ms)
while($row = $res->fetch_assoc())
{
$clist[$row['upload_id']][$row['dialcode_id']][$row['carrier_id']]['std'] = $row['cost_std'];
$clist[$row['upload_id']][$row['dialcode_id']][$row['carrier_id']]['ecn'] = $row['cost_ecn'];
$clist[$row['upload_id']][$row['dialcode_id']][$row['carrier_id']]['wnd'] = $row['cost_wnd'];
$dialcode_destination[$row['upload_id']][$row['carrier_id']][$row['dialcode_id']]['other_destination'] = $row['destination_id'];
$dialcode_destination[$row['upload_id']][$row['carrier_id']][$row['dialcode_id']]['carrier_destination'] = $row['carrier_destination_id'];
}
现在结果集的10行,更小的数组和性能高30倍(0.041ms)不是最快但仍然更好。
while($row = $res->fetch_assoc())
{
$customer[$row['id']]['name'] = $row['name'];
$customer[$row['id']]['code'] = $row['customer'];
}
你需要加载所有这些结果到内存? – 2010-05-26 09:40:33
61s中的488k行实际上是每次迭代0.125ms,所以只有3倍慢了30倍。我花了很长时间盯着这些数字,认为他们不是很对,因为我打扰到检查! :) – Chris 2010-05-26 10:23:31