Mehrere Datensätze lesen



  • Hi,

    ich möchte gerne einige bestimmte Datensätze (maximal 20) lesen in einem Query, um 3 bestimmte zu lesen habe ich es so gemacht:

    select * from `meine_tabelle` where `id` = 1 or `id` = 4 or `id` = 7
    

    Doch ich glaub bei sagen wir 18 wird das extrem lam, wegen dem "or", und das möchte ich nicht. Wie kann man denn das lesen "beschleunigen" um sagen wird mal die Datensätze mit den ids 1,2,3,6,7,3,88,33,4,9,10,11,12,20 zu bekommen?

    Danke euch im Voraus 🙂 Euer SQLNoob.



  • Du machst einen Query und hohlst für jedes Ergebnis einen Datensatz, anderst wird das wohl kaum gehen 😉



  • ...oder vielleicht
    select * from tabelle where id in (1,2,3,6,7,3,88,33,4,9,10,11,12,20);



  • isabeau schrieb:

    ...oder vielleicht
    select * from tabelle where id in (1,2,3,6,7,3,88,33,4,9,10,11,12,20);

    Wobei das mit Sicherheit intern wieder in 'or's geändert wird.
    So ist es übersichtlicher und weniger tiparbeit, aber beschleunigen wird das
    bestimmt nix. So lahm dürfte es aber auch bei den Paar Werten nicht werden.

    Ansonsten die ids in eine neue Tabelle packen und per join abfragen...



  • Wenn du so eine Abfrage brauchst dann hast du schon eine Designfehler.
    Wieso brauchst du den diese Abfrage nach bestimmten ID`s?

    Vielleicht haben ja die gesuchten datensätze andere Kriterien wie z.B. Postleitzahl und dann eben

    WHERE postleitzahl = 1234

    Bei der Abfrage mit dem OR solltest Du bedenken das bestimmte RDBMS eine max anzahl an Zeichen im Query hat. z.B. MySQL.



  • @Unix-Tom
    es sind sogar Postleitzahlen. Der Benutzer kann in einer MultiListBox bis zu 20 Postleitzahlen auswählen, die dann nachgelesen werden sollen und weiterverarbeitet werden. schlüssel ist die plz.

    hab das mit den ids nur genommen, da es evtl. etwas leichter ist zu verstehen. 🙄



  • Vielleicht ist es ja schneller, die Abfragen einzeln abzuschicken, also für jede PLZ eine Abfrage. Manche Datenbanken scheinen bei Oder-Abfragen nicht über den Index zu gehen. (Einen Suchindex über die PLZ setze ich einfach mal voraus.)



  • 20 PLZs als "select ... where .. in () " sollte eigentlich noch schnell genug sein. Sicher das dein Feld indiziert ist?


Anmelden zum Antworten