Is it normal for php to take so long for the transaction of large volumes of records?

0

I have a function where I keep mysql with laravel around between 6500 and 7000 records to the database therefore are that amount of iteration is delayed around 15 minutes what I find is a lot,

I know that it depends a lot on how this code is written for the performance but in any case I ask for the clarification of the understanding

Is there any way to make it take less time?

[Upload my code]

foreach ($detallado as $value => $d) {
            try {

                if (! empty($d['IdUnidadRecaudadora'])) {
                    $tratamiento = Helpers::BuscaOrdenArchivo($idtiporecaudacion);
                    $posmonto = $tratamiento['monto'];
                    if ($tratamiento['dv'] == "-") {
                        $rutpos = $tratamiento['rut'];
                        $rut = $d[$rutpos];
                    } else {
                        $posrut = $tratamiento['rut'];
                        $posdv = $tratamiento['dv'];
                        $rut = trim($d[$posrut]).trim($d[$posdv]);
                    }
                    if ($idtiporecaudacion == 10) {
                        $rut = $d[$tratamiento['rut']];
                        $rutcompleto = Helpers::SeparaRut(trim($rut));
                        $rut = $rutcompleto[0];
                        $Dv = $rutcompleto[1];
                        $monto = trim(str_replace('V', '', $d[$posmonto]));
                    } else {
                        $rutcompleto = Helpers::SeparaRut($rut);
                        $rut = $rutcompleto[0];
                        $Dv = $rutcompleto[1];
                        $monto = $d[$posmonto];
                    }
                    $contribuyente = Contribuyente::where([
                        ['Rut', '=', $rut],
                        ['Dv', '=', $Dv],
                    ])->get()->toarray();
                    if (!empty($contribuyente[0]['IdContribuyente'])) {
                        //Si existe entonces busca compromiso de pago
                        $compromisopago = CompromisoPago::with('mandato')->where([
                            ['C_IdContribuyente', '=', $contribuyente[0]['IdContribuyente']],
                            ['UR_IdUnidadRecaudadora', '=', $d['IdUnidadRecaudadora']],
                            ['Estatus', '=', 1],
                        ])->first();

                        if (!empty($compromisopago->mandato->Folio)) {
                            // Si no esta vacio el folio lo asigna a la variable
                            $folio = $compromisopago->mandato->Folio;
                            if (empty($compromisopago->IdCompromisoPago)) {
                                // entra si no existe compromiso de pago
                                $logs = new Logs();
                                $logs->Mensaje = 'no se encuentra compromiso de pago';
                                $logs->Accion = 'Buscar id del compromiso de pago';
                                $logs->Variable1 = 'Id del contribuyente: '.$contribuyente[0]['IdContribuyente'];
                                $logs->Variable2 = ' no se encuentra comnpromiso de pago pero aun asi se guarda el detalle fecha: '.$fechaestadistica;
                                $logs->save();
                                $idcompromisopago = 1;

                            } else {
                                //existe compromiso de pago por lo que lo asigna a una variable
                                $idcompromisopago = $compromisopago->IdCompromisoPago;
                            }
                        } else {
                            //  guardar en tabla logs no existe mandato
                            $logs = new Logs();
                            $logs->Mensaje = 'no se encuentra mandato(Folio)';
                            $logs->Accion = 'Buscar mandato(Folio)';
                            $logs->Variable1 = 'Rut del contribuyente:'.$contribuyente[0]['Rut'].'-'.$contribuyente[0]['Dv'].' e id de la UR: '.$d['IdUnidadRecaudadora'];
                            $logs->Variable2 = 'Con fecha de subida '.$fechaestadistica;
                            $logs->save();
                        }
                    } else {
                        //  guardar en tabla logs no existe contribuyente pero igual se guarda el detalle perro papurri papa
                        $logs = new Logs();
                        $logs->Mensaje = 'no se encuentra Contribuyente';
                        $logs->Accion = 'Buscar id del contribuyente Rut '.$rut.' dv '.$Dv;
                        $logs->Variable1 = 'id tipo recaudación '.$idtiporecaudacion;
                        $logs->Variable2 = ' no se encuentra contribuyente pero aun asi se guarda el detalle fecha: '.$fechaestadistica;
                        $logs->save();
                    }
                }       

                $detalle = new Pago();              
                $detalle->CP_IdCompromisoPago = $idcompromisopago;
                $detalle->NroComprobante = $folio;
                $detalle->MontoPagado = $monto; //monto pagado
                $detalle->FechaPago = $fechacontable;
                $detalle->MesPago = substr($fechaestadistica, 5, 2);
                $detalle->save();
                unset($detallado[$value]);


            } catch (\Exception $e) {
                dd($e->getMessage(), $e->getLine(), $d);
            }
    
asked by Pablo Moraga 22.10.2018 в 16:12
source

1 answer

-3

Try to do it in a mysql transaction, in tests that I have performed the speed increases by several orders of magnitude. link

DB::beginTransaction();

[your code]

DB::commit();
    
answered by 22.10.2018 в 16:19