Hallo zusammen,
Ich hab folgendes Problem und ich bräuchte mal ein paar clevere Ideen wie man das anders lösen kann.
Ich habe eine Datenbank mit 180.000 Einträgen.
Und ich habe eine Liste mit 20.000 Barcodes die ich mit der Datenbank abgleichen muss.
Mein Problem ist wenn ich das mit einer simplen foreach-Schleife arbeite ich 20.000 mal diesen Aufruf habe:
foreach($data as $daten)
{
…
//Datensatz abfragen
$row = mysqli_fetch_array(mysqli_query($con,sprintf('select t.da from tabelle t where t.barcode=%s limit 1', $barc)));
…
}
Im ungünstigsten Fall dauert ein select ca. 0,3s. da wäre ich bei über 100min Skriptlaufzeit. Das muss doch irgendwie besser gehen.
Indexierung bringt übrigens nichts, dann ist es sogar noch etwas langsamer.
Die Idee wäre vielleicht die notwendigen Daten aus der Datenbank in einen Array zu laden und dann zu verarbeiten. Aber ob das wirklich schneller ist?
Oder kann man die Datenbankabfrage im Vorfeld einschränken, dass man nicht immer alle 180.000 Einträge durchsucht werden, sondern nur die 20.000 im richtigen Status.
Für eure Ideen bin ich sehr dankbar.
Ich hab folgendes Problem und ich bräuchte mal ein paar clevere Ideen wie man das anders lösen kann.
Ich habe eine Datenbank mit 180.000 Einträgen.
Und ich habe eine Liste mit 20.000 Barcodes die ich mit der Datenbank abgleichen muss.
Mein Problem ist wenn ich das mit einer simplen foreach-Schleife arbeite ich 20.000 mal diesen Aufruf habe:
foreach($data as $daten)
{
…
//Datensatz abfragen
$row = mysqli_fetch_array(mysqli_query($con,sprintf('select t.da from tabelle t where t.barcode=%s limit 1', $barc)));
…
}
Im ungünstigsten Fall dauert ein select ca. 0,3s. da wäre ich bei über 100min Skriptlaufzeit. Das muss doch irgendwie besser gehen.
Indexierung bringt übrigens nichts, dann ist es sogar noch etwas langsamer.
Die Idee wäre vielleicht die notwendigen Daten aus der Datenbank in einen Array zu laden und dann zu verarbeiten. Aber ob das wirklich schneller ist?
Oder kann man die Datenbankabfrage im Vorfeld einschränken, dass man nicht immer alle 180.000 Einträge durchsucht werden, sondern nur die 20.000 im richtigen Status.
Für eure Ideen bin ich sehr dankbar.