kostenloser Webspace werbefrei: lima-city


mysql: SQL-Befehl dauert dauert zu lange; Warum ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    flmap

    flmap hat kostenlosen Webspace.

    Hallo zusammen,

    ich habe ein SQL-Befehl das SEHR lange braucht und ich mir leider nicht erklären kann, woran es liegt.

    Es gibt die Tabellen ta_FlightData mit vielen Millionen Datensätze und die Tabelle ta_AircraftType mit ca 400 Datensätze.
    Beider Tabellen haben ein Datenfeld mit Namen Aircraft vom Typ varchar.

    Nun will ich Datensätze aus ta_FlightData angezeigt bekommen, die ein Aircraft enthalten, welches NICHT in der Tabelle ta_AircraftType enthalten ist.

    Mein SQL-Befehl:
    SELECT * FROM ta_FlightData WHERE `Aircraft` NOT IN (SELECT `Aircraft` FROM ta_AircraftType) LIMIT 0,1;


    Obwohl es viele Datensätze in der Tabelle ta_FlightData gibt, die angezeigt werden müssten, dauert die Abfrage so lange, das ich sie noch nie bis zu ende laufen habe lassen.

    Hat jemand eine Ahnung warum die Abfrage soooo lange dauert, und eventuell wie man sie besser schreiben könnte.

    Gruß
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Man muss sagen, dass eine Abfrage bei

    vielen Millionen Datensätzen


    wohl relativ lange dauern müsste. Trotzdem hat es bei mir meistens geholfen, einfach statt dem * die einzelnen Felder anzugeben, die du auslesen möchtest. Dort müsstest du dann nur die Spalten eingeben, die wirklich benötigt werden und würdest möglicherweise nicht ganz so viel auslesen. Auch, wenn du alle Spalten auslesen willst, hilft diese Methode manchmal ... frag' mich nicht warum.
  4. Autor dieses Themas

    flmap

    flmap hat kostenlosen Webspace.

    Danke für den Tip, hat nur leider noch nicht die erwünschte Besserung gebracht.

    Wenn ich in dem SQL-Befehl anstelle von "NOT IN" einfach "IN" schreibe, dann ist die Abfrage schön schnell.
    Außerdem hatte ich zum Testen bereits ein "LIMIT 0,1" angefügt, um nicht gleich mit Datensätzen erschlagen zu werden.

    Daher gehe ich davon aus, dass das Problem in der WHERE-Klausel im Bereich von "NOT IN (...)" liegen dürfte.

    Da sehr viele der Datensätze die WHERE-Bedingung erfüllen sollten, hätte ich ein Ergebnis in deutlich unterhalb einer Sekunde erwartet. Aber selbst nach über 10 Stunden wurde noch kein Ergebnis ausgegeben (auch nicht mit der Angabe von "LIMIT 0,1").

    Beitrag zuletzt geändert: 24.6.2014 19:30:47 von flmap
  5. Das Problem ist nicht der Query, sondern mit hoher Wahrscheinlichkeit der Aufbau der einzelnen Tabellen.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!