Welche Abfrage ist schneller?



  • Ich habe eine Tabelle á la

    +----+------+
    | id | name |
    +----+------+

    Diese Tabelle hat zB 1000 Zeilen. Nun habe ich 100 ids die in der Tabelle enthalten sind und ich will diese abfragen.

    Gibt es einen Geschwindigkeitsunterschied zwischen

    for( int i = 0; i < LängedesIdArrays; ++i ) {
      Ergebnis = select * form tabelle where id = idArray[i];
      bearbeite Ergebnis
    }
    

    und
    2.

    Ergebnis = select * from tabelle where id=idArray[0] or id=idArray[1] or ... or id = idArray[99];
    bearbeite Ergebnis
    

    ?



  • Der zweite Ansatz sollte schneller laufen, da hier nur ein Stmt geparst, optimiert und ausgeführt wird. Dabei ist der Vergleich unfair, da das erste Stmt mit einem Parameter versehen werden kann und mit Prepare() vorbereitet werden kann. Warum mißt Du es nicht einfach, wenn es für Dich wichtig ist?
    Hinweis: Viele Systeme unterstützen den IN-Operator:
    select * from tabelle where id in (3,4,5,6,7);



  • bei 100 IDs kannst du noch gut mit "in" arbeiten.
    wenn es mehr werden solltest du einen temp-table oder eine table-variable machen wo du die IDs reinsteckst, und danach einfach nen join verwenden.



  • Nimm Nr 2 - Die Abfrage 1 wird aufgrund eines Schreibfehlers ohnehin nicht funktionieren ^^



  • Mit 2. hast DU aber ein Problem wenn es sehr viele OR werden. Manche LIBS haben ein LIMIT.

    Denke aber das Du etwas übers Design nachdenken solltest.
    Warum gerade diese 100?
    Kann man das nicht mit einem SELECT WHERE lösen?


Anmelden zum Antworten