Ich habe eine Tabelle mit sehr vielen Eintragen (etwa 1 Mrd Zeilen) die aber zum Teil sehr viel gemeinsam haben etwa so:
Name Reisedatum Position Erfolgreich
Klaus April 1 ja
Klaus Main 1 nein
Klaus Mai 1 ja
Bernd April 0 nein
Ingo April 0 ja
Bernd Mein 0 ja
Es gibt für Klaus Bernd und Ingo zig tausend Einträge wobei alle Einträge von Klaus bei Position IMMER eine 1 stehen haben und alle von Bernd und Ingo eine IMMER eine 0 usw…
Ich möchte jetzt eine Liste mit allen Namen generieren die als Position 1 eingetragen haben.
Mein query sieht jetzt so aus:
SELECT name FROM mitarbeiter WHERE Position = 1 GROUP BY name
Ich kann mir vorstellen, dass das sehr uneffektiv (da seeehr langsam) ist da ja die 0 bei allen Datensätzen gleich ist und ich pro Name eigentlich nur einen Datensatz anfassen muss um zu wissen ob er eine 0 oder eine 1 aufweist!
Wie hoch ist der Anteil von Position = 1 gemessen an der Gesamtanzahl? Falls eher gering: ein partieller Index. Das GROUP BY könntest Du durch ein SELECT DISTINCT name wohl ersetzen.
Der Anteil liegt bei ca. 30% aller “Namen”, ich dachte eher an einen unterquery a la exist gedacht oder aber damit habe ich noch keine Erfahrungen gesammelt!