Count über mehrere Tabellen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Count über mehrere Tabellen

    Hallo habe ein kleines Abfrage Problem.

    Ich will ein Userranking erstellen und will dafür die Aktivität der einzelnen User messen. Dafür benötigte ich die Anzahl der Aktivitäten.

    Die Tabellen:
    Es gibt eine Tabelle User in der die Userdaten stehen.
    Es gibt eien Tabelle SMS in der SMS-Einträge der User stehen
    Es gibt eien Tabelle Kommentar in der Kommentar der User stehen
    Es gibt eien Tabelle Artikel in der Artikel der User stehen

    so weit so gut.
    Jetzt möchte ich eine Select-Statement bauen das mir folgendes liefert:
    UESR | Anzahl SMS| Anzahl Artikel | Anzahl Kommentare |

    Prinzipiell wollte ich es mit Joins lösen. In etwas so:

    Quellcode

    1. Select u.name, count(distinct s.id_sms), count(distinct a.id_artikel), count(distinct k.id_kommentar)
    2. from User u
    3. left join SMS s on s.id_user = u.id_user
    4. left join Artikel a on a.id_user = u.id_user
    5. left join Kommentar k on k.id_user = u.id_user
    6. group by u.id_user


    Klappt auch wunderbar, allerdings braucht die Abfrage, trotz entsprechender Indizes, über 1 Minute.
    Das ist nicht weiter verwunderlich, denn alleine die Join-Tabellen ergenen bei ca 5500*1600*800 Einträgen ca. 7 Mrd. Datensätze.

    Kann man die Abfrage irgendwie beschleunigen? Kann man die Tabellen noch vor dem Join einem Group by unterziehen? Dann würden die Datenmengen kleiner werden und das ganze beschleunigt.