Php Laravel 4.2-对于大量数据,在数据库中存储速度非常慢

Php Laravel 4.2-对于大量数据,在数据库中存储速度非常慢,php,mysql,laravel,optimization,large-data,Php,Mysql,Laravel,Optimization,Large Data,我正在构建一个每月处理数千套公寓的应用程序。 这意味着每个公寓每月在不同的表中插入、更新和选择几次 我使用了内置的laravel/雄辩的语法,没有使用原始sql,因为我对它不太熟悉 我有一个按钮,可以为所有公寓生成一个月的信息。我不是很高兴把所有这些都放在一个行动中,但这是对我的要求 现在,每当我点击按钮并生成信息时,随着每个月数据库的填满,处理信息变得越来越困难。考虑到目前的情况,我认为这是正常的。我能得到一个如何优化这个的建议吗?我要等30秒-1分钟才能完成。。。。这是不好的 这就是我的控制

我正在构建一个每月处理数千套公寓的应用程序。 这意味着每个公寓每月在不同的表中插入、更新和选择几次

我使用了内置的laravel/雄辩的语法,没有使用原始sql,因为我对它不太熟悉

我有一个按钮,可以为所有公寓生成一个月的信息。我不是很高兴把所有这些都放在一个行动中,但这是对我的要求

现在,每当我点击按钮并生成信息时,随着每个月数据库的填满,处理信息变得越来越困难。考虑到目前的情况,我认为这是正常的。我能得到一个如何优化这个的建议吗?我要等30秒-1分钟才能完成。。。。这是不好的

这就是我的控制器的基本运行方式(这是主要的存储函数,它调用其他几个函数):

接下来是storeMainData()函数:

$validator = Validator::make(Input::all(), MainData::$rules, MainData::$messages);
if($validator->passes()){
    $check = MainData::where('month', $month)->where('apartament_id', $apartament->id)->first();
    if(count($check)>0){
        $store_main_data = $check;
    }
    else{
        $store_main_data = new MainData;
    }

    //main data stuff (like apartment receipt data etc...)

    $store_main_data->save();
}
else{
    return Redirect::back()
        ->withErrors($validator);
}
接下来是storePaymentCategory1()函数(这是其他付款类别如何工作的示例):


如果这涉及到MySQL,请提供SQL语句。您迭代了多少个
$partments
,您迭代了多少个
$payment\u categories
?如果这涉及到MySQL,请提供SQL语句。您迭代了多少个
$payment
,以及迭代了多少个
$payment\u类别
$validator = Validator::make(Input::all(), MainData::$rules, MainData::$messages);
if($validator->passes()){
    $check = MainData::where('month', $month)->where('apartament_id', $apartament->id)->first();
    if(count($check)>0){
        $store_main_data = $check;
    }
    else{
        $store_main_data = new MainData;
    }

    //main data stuff (like apartment receipt data etc...)

    $store_main_data->save();
}
else{
    return Redirect::back()
        ->withErrors($validator);
}
// NOW WE MUST APPLY: total amount stored in the payment category / apartment percentage = due payment for the apartment;

// identify the percentage 
$percentage_type = $payment_category->percentage_id;
$percentage = Percentages::where('percentage_type_id', $percentage_type)->where('apartment_id', $apartment->id)->first();

// verify if the percentage type is applied to this apartment
$calculated_apartments = Percentages::where('percentage_type_id', $percentage_type)->get();
$calculated_apartments_array = [];
foreach($calculated_apartments as $calculated_apartment){
    array_push($calculated_apartments_array, $calculated_apartment->apartment_id);
}

if(in_array($apartment->id, $calculated_apartments_array)){
    $validator = Validator::make(Input::all(), DuePayments::$rules, DuePayments::$messages);
    if($validator->passes()){
        $check = DuePayments::where('month', $month)->where('apartment_id', $apartment->id)->where('payment_category_id', $payment_category->id)->first();
        if(count($check)>0){
            $store_due_payment = $check;
        }
        else{
            $store_due_payment = new DuePayments;
        }

        // store due payment stuff

        $store_due_payment->save();
    }
    else{
        return Redirect::back()
            ->withErrors($validator);
    }
}