MySQL - Abfrage optimieren
Hallo Gemeinde,
ich habe in MySQL eine Tabelle, die folgenden Aufbau hat:
JahrMonat - BereichsID - a - b - c - d ...
201001 - 1 - ...
201002 - 1 - ...
201003 - 1 - ...
201004 - 1 - ...
201005 - 1 - ...
Es werden monatsbezogen für mehrere Bereiche verschiedene Spalten (a - d in diesem Beispiel) gespeichert. Jetzt benötige ich eine Abfrage, in der ich mehrere Monate zusammenfasse und dabei die Spalten miteinander verrechne:
SELECT ((t1.a + t1.b + t1.c) - (t1.d)) AS Daten01,((t2.a + t2.b + t2.c) - (t2.d)) AS Daten02,((t3.a + t3.b + t3.c) - (t3.d)) AS Daten03
FROM tabelle t1 LEFT JOIN tabelle t2 on (t1.BereichsID = t2.BereichsID) LEFT JOIN tabelle t3 on (t2.BereichsID = t3.BereichsID)
WHERE t.BereichsID = 1234
So oder so ähnlich (aus dem Kopf getipt - ungetestet) sieht meine Abfrage aus, die auch laufen würde. Jedoch braucht diese einige Sekunden, obwohl "keine" Daten drin sind.
Wie bekomme ich das Ding schneller? Wie kann ich zusätzlich noch die Monate mit einschränken?
Danke euch!!
ich habe in MySQL eine Tabelle, die folgenden Aufbau hat:
JahrMonat - BereichsID - a - b - c - d ...
201001 - 1 - ...
201002 - 1 - ...
201003 - 1 - ...
201004 - 1 - ...
201005 - 1 - ...
Es werden monatsbezogen für mehrere Bereiche verschiedene Spalten (a - d in diesem Beispiel) gespeichert. Jetzt benötige ich eine Abfrage, in der ich mehrere Monate zusammenfasse und dabei die Spalten miteinander verrechne:
SELECT ((t1.a + t1.b + t1.c) - (t1.d)) AS Daten01,((t2.a + t2.b + t2.c) - (t2.d)) AS Daten02,((t3.a + t3.b + t3.c) - (t3.d)) AS Daten03
FROM tabelle t1 LEFT JOIN tabelle t2 on (t1.BereichsID = t2.BereichsID) LEFT JOIN tabelle t3 on (t2.BereichsID = t3.BereichsID)
WHERE t.BereichsID = 1234
So oder so ähnlich (aus dem Kopf getipt - ungetestet) sieht meine Abfrage aus, die auch laufen würde. Jedoch braucht diese einige Sekunden, obwohl "keine" Daten drin sind.
Wie bekomme ich das Ding schneller? Wie kann ich zusätzlich noch die Monate mit einschränken?
Danke euch!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 181645
Url: https://administrator.de/forum/mysql-abfrage-optimieren-181645.html
Ausgedruckt am: 06.04.2025 um 20:04 Uhr
5 Kommentare
Neuester Kommentar
tut mir Leid - aber deine Abfrage ergibt keinen Sinn !?
... was erwartest Du für eine Ausgabe ?
- wozu die Berechnungen 3 mal durchführen
- über die selbe Tabelle (selbe Daten)
- und mit LEFT Join verbinden
... was erwartest Du für eine Ausgabe ?
in der ich mehrere Monate zusammenfasse und dabei die Spalten miteinander verrechne
da müsste doch irgendwo auch auf JahrMonat bezug genommen werden
Da Du nur durch reduzieren der zu verarbeitenden Daten eine Verbesserung erzielen kannst - aber bei jedem Sub Select eine andere Where Bedingung vorhanden ist - sehe ich kaum Spielraum für Optimierungen über die Select Abfrage.
... ggf kann man vorher noch den Datenbestand auf das Jahr reduzieren
... aber viel wird es wohl nicht bringen.
Meine Empfehlung:
... dann geht das Filtern und Gruppieren schneller und einfacher
... ggf kann man vorher noch den Datenbestand auf das Jahr reduzieren
JahrMonat LIKE '2010%'
Meine Empfehlung:
- Spalte das Feld JahrMonat auf in Jahr und Monat
- Ersetze die Felder a - d durch key und value
Jahr | Monat | BereichsID | key | value
2010 | 1 | 1 | a | wert
2010 | 1 | 1 | b | wert
2010 | 1 | 1 | c | wert
2010 | 1 | 1 | d | wert
2010 | 2 | 1 | a | wert
...