SUM() optimieren
-
Hallo,
ich habe eine mySQL Datenbank mit einer Tabelle die ca 2 Millionen Datensätze hat. Bei diesen Datensätzen wird häufig die Funktion SUM() genutzt um mehrere zehtntausend Datensätze zusammenzuzählen.
Allerdings geschieht dies recht langsam. Gibt es hier in irgendeiner Weise potential dies zu optimieren?
-
Hallo Moh,
ja man kann sich hier verschiedene Sachen überlegen:
- Das Tabellenschema aufteilen (falls möglich) -> vgl. Column-Store vs. Row-Store -> der Vorteil ist, dass das DBMS dann mehr relevante Werte auf einer Seite findet (Bottleneck ist ja Sekundärspeicher -> Primärspeicher)
- Wenn Daten hinzugefügt werden, dann schon voraggregieren
- Materialized Views haben teilweise interessante Eingenschaften... wie es damit in MySQl aussieht weiß ich gerade nicht.
- Deine Query nochmal analysieren - vielleicht kann man da noch was optimieren - vllt. berechnest du mehrere Sachen mehrfach -> das dann in eine temporary table...
- Dem MySql-Server mehr Ressourcen geben?Wennn du ein wenig genauer wirst -> ungefähres Relationenschema und was daraus gewonnen werden soll, dann kann ich dir vllt. besser weiterhelfen.
Generell ist es natürlich auch wichtig zu wissen, was das Ziel ist: Entweder schnell in die DB schreiben (OLTP) oder schnell die Werte analysieren (OLAP).
-
@Moh
Ich bin mir fast sicher, dass SUM() nicht das Problem ist.
Werden die Abfragen denn schneller wenn du statt SUM() einfach die Spalte selektierst?
Ich denke nämlich eher dass das Zusammenklauben der 10000 Zeilen das eigentliche Problem ist.Und das bekommst du nur weg, wenn du zusiehst dass ... naja, einfach gesagt: dass weniger Pages geladen werden müssen.
Ein Index auf die Filterbedingung wo zusätzlich zum Index-Feld noch das zu summierende Feld drinnen ist könnte z.B. helfen.Bzw. poste einfach mal die Abfrage. So allgemein kann man da schwer gute Tips geben.
-
Vorallem kommt es auf dein Tabellendesign an.
EIne Tabelle in der alle Daten stehen, welche 2 Mill rows hat, ist nicht so einfach zu durchsuchen wenn die Tabelle (Datei) sehr groß ist.Durchsuche mal eine Datei mit mehreren 100 GB.
Weiters kommt es darauf an wieviele das gleichzeitig machen.
Was ist denn lange bei dir?
Manche sind foh wenn die Abfrage in 5 Sekunden fertig ist.
Für manche ist das sehr lange.MySQL wurde nie für sowas gebaut.
Deshalb kann man auch bei den großen RDBMS (ORACLE, MSSQL) das ganze in mehrere Dateien zerlegen.
Hier gibt es noch viel mehr Hebel um anzusetzen und es zu beschleunigen. Das hat MySQL nicht.Würde auf Tempo für kleine Tabellen im Web erfunden.