Elegantere (schnellere) Lösung als "group by" ?!

Hallo zusammen!!

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!

Gibt es eine besser Lösung als das „group by“??

Vielen Danke im Vorraus für jede Art von Hilfe!

Gruß
TK

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.

Grundlegend: schaue Dir EXPLAIN (ANALYSE) an.


Andreas

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!

Steht das Datenmodell zur Diskussion? Eventuell liesse sich da noch was optimieren, wenn so viele gleichförmige Einträge vorhanden sind.

Gruß Uwe

SELECT DISTINCT ON (name) name FROM mitarbeiter  WHERE Position = 1

Gruß