php循环处理6万条数据性能优化问题
何建城 2016-02-01 09:55:31 如下代码,这是服务器上的一个脚本文件的。变量$productList里取出的表erp_products_data里的数据,有6万多条,也就是我的foreach循环要跑6万多次,而循环里面,还要处理3个查询sql,1个更新sql,循环万总计跑了24万多sql才结束。这样的结果是慢。我自己的思路是把sql拆分处理,因为一次性处理6万多数据非常慢的话,对内存是一个极大的影响,这问题可能还有其他优化方案,所以问问各位老哥们优化的方法。
注:1. foreach里面的查询无法取出一次性处理,复杂性会更大,性能不会太好
2. 这是一个全表扫的sql,需要计算每一个行的某个字段的值,每天都需要计算
$productList = $productsManage->getAllActiveProductList($fields, $params);
//print_r($productList);exit;
if (empty($productList)){
die('没有获取到产品信息');
}
$table = "erp_products_data";
$i = 0;
//开始循环来计算吧
foreach ($productList as $pro){
//SKU
$sku = trim($pro['products_sku']);
$warehouse = $pro['product_warehouse_id'];
$id = $pro['products_id'];
//计算利润率
$avgProfitRate = $getTotals->getSkuFiveAverage($sku);
//计算60天退款次数
$skuMoneybackCount = getSkuMoneybackCount($sku);
//计算各仓库的60天销量
$sold_60 = getSalesTotalInSalesRecordMinDays($sku, 60 ,$v['product_warehouse_id']);
$data = array();
$data['sold_60'] = $sold_60;
$data['backMoney_60'] = $skuMoneybackCount;
$data['profitRate_15'] = $avgProfitRate;
$where = " products_id=".$id;
$doSql->update($table, $data, $where);
if($i>100){
$end_time = microtime(true);
$ret_time = $end_time - $start_time ;
echo "Code execution time is ".$ret_time." second";
echo 'the end...';
exit;
}
$i++;
}