【发布时间】:2010-05-26 09:34:07
【问题描述】:
$res 包含大约 488k 行,整个循环需要 61 秒!每个周期超过 1.25 毫秒!这么多时间是怎么回事?
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'];
}
【问题讨论】:
-
您需要将所有这些结果加载到内存中吗?
-
488k 行在 61 秒内实际上是每次迭代 0.125 毫秒,因此只慢了 3 倍而不是 30 倍。我花了 方式 太长时间盯着那些数字认为它们不正确在我懒得检查之前! :)