SQL join und count VS. column für die Anzahl, was ist effizienter?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

DasIch hat geschrieben:
/me hat geschrieben:Es kann aber durchaus sein, dass die DB das intern ohnehin mitführt. Das weiß man allerdings üblicherweise nicht.
Sowas ist sehr gut dokumentiert, wenn man Performance Probleme hat sollte man dies wissen.
Finde das mal bei Oracle heraus. Und das noch über verschiedene Versionen und Patchlevel. Ich verwende Oracle seit Version 6 und habe da schon einige unschöne Überraschungen erlebt. Unter anderem spielt dann auch noch eine Rolle, wie oft man die Statistiken aktualisiert - und das ist nur der dokumentierte Teil.
DasIch hat geschrieben:Wir reden hier nicht über zwei O(1) Operationen, von denen eine ein bisschen langsamer ist. Selbst wenn man eine Tabelle hat in einer Größenordnung von 100M Zeilen, was noch problemlos in den Arbeitsspeicher passt, kann es durchaus Minuten dauern bis man die Zeilen gezählt hat. Das ist alles andere als "etwas Performanceverlust".
Klar, in der Größenordnung wird es unhandlich. Ich habe gerade mal testweise auf einer Oracle 11 einen COUNT auf eine partitionierte Tabelle mit 393.669.171 Einträgen abgesetzt. Der erste Durchlauf dauerte satte 3:10 Minuten, der zweite dann immerhin auch noch 0:35. Das ist für einen interaktiven Zugriff typischerweise inakzeptabel. Auf Tabellen mit nur ein paar 100.000 Zeilen bewege ich mich dafür im Millisekundenbereich. Bei vielen INSERT- und DELETE-Vorgängen werden Trigger allerdings auch irgendwann nicht mehr lustig. Deshalb sage ich ja: es hängt vom Anwendungsfall ab.
Zoja
User
Beiträge: 145
Registriert: Freitag 28. Februar 2014, 14:04

Vielen Dank nochmal an alle, die sich gemeldet haben. Sehr wertvolle Informationen für mich.
Antworten