sql >> Database teknologi >  >> RDS >> Mysql

hvordan man håndterer store opdateringsforespørgsler i mysql med laravel

Hvis du tænker på at bygge en forespørgsel som UPDATE users SET column = 'value' WHERE id = 1 OR id = 2 OR id = 3 ... OR id = 50000 eller WHERE id IN (1, 2, 3, ..., 50000) så bliver det nok for stort. Hvis du kan lave noget logik for at opsummere det, ville det forkorte forespørgslen og fremskynde tingene i MySQL's ende betydeligt. Måske kunne du lave det WHERE id >= 1 AND id <= 50000 .

Hvis det ikke er en mulighed, kan du gøre det i byger. Du vil sandsynligvis gå gennem rækkerne af CSV-filen, opbygge forespørgslen som en stor WHERE id = 1 OR id = 2... forespørgsel og hver 100 rækker eller deromkring (eller 50, hvis det stadig er for stort), kør forespørgslen og start en ny for de næste 50 id'er.

Eller du kunne bare køre 50.000 enkelt UPDATE forespørgsler på din database. Helt ærligt, hvis tabellen gør korrekt brug af indekser, bør kørsel af 50.000 forespørgsler kun tage et par sekunder på de fleste moderne webservere. Selv de travleste servere burde kunne klare det på under et minut.

Hvad angår læsning af en fil i bidder, kan du bruge PHPs grundlæggende filadgangsfunktioner til det:

$file = fopen('/path/to/file.csv', 'r');

// read one line at a time from the file (fgets reads up to the
// next newline character if you don't provide a number of bytes)
while (!feof($file)) {
    $line = fgets($file);

    // or, since it's a CSV file:
    $row = fgetcsv($file);
    // $row is not an array with all the CSV columns

    // do stuff with the line/row
}

// set the file pointer to 60 kb into the file
fseek($file, 60*1024);

// close the file
fclose($file);

Dette vil ikke læse hele filen i hukommelsen. Ikke sikker på, om Laravel har sin egen måde at håndtere filer på, men sådan gør man det i grundlæggende PHP.



  1. Advarsel:Kan ikke ændre header-oplysninger - headere er allerede sendt ved en fejl

  2. Kopiér kolonneværdi fra én tabel til en anden matchende id'er

  3. Brug af JDeveloper med MySQL-database og Oracle-database på AWS RDS, del 3

  4. Er Entity Framework knyttet til SQL Server?