Ergebnis 1 bis 5 von 5

Thema: SQL Abfrage "not in" zu langsam

  1. #1
    Interessierte/r
    Registriert seit
    18.08.2007
    Beiträge
    112
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard SQL Abfrage "not in" zu langsam

    Hey Leute,

    ich möchte in einem XT-Commerce Shop kurz abfragen wie viel Leute
    es gibt die Registriert sind aber noch nie bestellt haben.

    Ich benutze folgendes SQL-Statement dafür:

    Code:
    SELECT count(customers_id) 
    FROM `customers` 
    WHERE customers_id NOT 
    IN (
    SELECT customers_id
    FROM orders
    )
    Leider bekomme ich nie ein Ergebnis weil die Abfrage zu lange dauert hängt sich wohl immer der SQL Server auf (auch Lokal).

    In der Tabelle customers befinden sich: 61,421 Datensätze
    und in der Tabelle orders sind es: 55,793 Datensätze.


    Hat jemand ne Idee wie ich die Abfrage performanter gestalten kann?

    Vielen Dank
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: SQL Abfrage "not in" zu langsam

    Ich würde der Tabelle customers ein feld `bestellt` o.ä. hinzufügen. default null, bei einer Bestellung auf 1 setzen.
    Dann sparst du dir die unterabfrage und ein boolean-feld mehr in der customers-tabelle macht den Braten nicht fett.

    Ist ein schönes Beispiel dafür, dass man manchmal in Sachen Normalisierung ein bißchen zurückstecken sollte zugunsten der Performance.
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  3. #3
    Interessierte/r
    Themenstarter

    Registriert seit
    18.08.2007
    Beiträge
    112
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: SQL Abfrage "not in" zu langsam

    Hey,

    das kam oben vielleicht ein bischen falsch rüber ich möchte das nur
    1mal aktuell ausführen da ich die Info benötige.

    Ich benötige die Info also auch rückwirkend für die Leute die aktuell
    schon bestellt haben.

  4. #4
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: SQL Abfrage "not in" zu langsam

    Wenn du es wirklich nur ein einziges Mal ausführen willst würde ich es einfach in zwei Abfragen aufteilen.
    Eine um die IDs auszulesen die schonmal etwas bestellt haben.
    Die Zweite um aus `customers` alle auszulesen, die nicht in der Menge enthalten sind.
    Unterabfragen sind immer langsam und sofern irgend möglich zu vermeiden.

    Wenn du es nicht nur einmal brauchst, sondern gelegentlich mal (bist du wirklich sicher dass du das nie wieder brauchst?) würde ich meine vorgeschlagene Lösung nehmen. Zum Aktualisieren der Customerstabelle brauchst du ja nur eben ein Script, das dir die IDs (distinct) ausliest die schon etwas gekauft haben und für diese IDs dann die neue Spalte `gekauft`auf 1 setzen.
    Geändert von SinnlosS (21.08.2009 um 01:46 Uhr)
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  5. #5
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: SQL Abfrage "not in" zu langsam

    Hatte neulich ein sehr ähnliches Problem. Habe nach etwas in Richtung "negativer JOIN" gesucht, aber nichts gefunden. Habe es dann auch mit einem Extra-Boolean-Feld gemacht.

Ähnliche Themen

  1. Hilfe!!! "Feld"-Abfrage?
    Von ooTOMoo im Forum HTML & CSS Forum
    Antworten: 2
    Letzter Beitrag: 09.07.2009, 23:17
  2. Border-Bottom: noch "zarter" als "1px dashed"?
    Von Mütze im Forum HTML & CSS Forum
    Antworten: 2
    Letzter Beitrag: 19.09.2008, 18:10
  3. existiert "case" Abfrage in php?
    Von NyctalusNoctula im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 09.12.2006, 17:14
  4. php: "bitte warten" oder "login läuft"
    Von phore im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 3
    Letzter Beitrag: 05.04.2006, 18:18
  5. Text immer "unten" und "rechts" am Frame
    Von Valdyn im Forum HTML & CSS Forum
    Antworten: 5
    Letzter Beitrag: 25.05.2004, 19:14

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •