Einzelnen Beitrag anzeigen
  #1  
Alt 26.05.2008, 00:20:57
Tim22 Tim22 ist offline
Anfänger
 
Registriert seit: May 2008
Beiträge: 1
MySQL Performance?

Ich möchte folgende Abfrage optimieren. Dazu habe die Abfrage per EXPLAIN mal erklären lassen:

Code:
SELECT d.NAME AS COL, SUM( 
CASE WHEN d.BLOCK =1
THEN Anzahl
ELSE 0 
END ) AS Anzahl1, SUM( 
CASE WHEN d.BLOCK =2
THEN Anzahl
ELSE 0 
END ) AS Anzahl2 FROM (
daten AS d
)
WHERE (
d.ART NOT LIKE 'ZV%'
)
GROUP BY d.NAME
ORDER BY d.NAME ASC
Diese Abfrage durchläuft alle Datensätze 7055 und nutzt den Schlüssel der auf d.Name indiziert. Die folgende Abfrage

Code:
SELECT d.NAME AS COL, d.BLOCK, SUM(Anzahl) 
FROM (
daten AS d
)
WHERE (
d.ART NOT LIKE 'ZV%'
)
GROUP BY d.NAME
ORDER BY d.NAME ASC
Diese Abfrage durchläuft nur 6604 Datensätze. Das sind diese die im Feld Art nicht 'ZV%' sind.

In der ersten Abfrage werden alle Daten auch die mit 'ZV%' im Feld Art sind durchlaufen. Leider liefert die 2 Abfrage nicht das gewünschte Ergebnis, da die Felder Block nicht nebeneinander stehen. Das macht insbesodere dann ein Problem wenn ich z.B. nur 20 Einträge selektieren will. Dann bekomme ich nur die aus Block 1 und ggf. nur ein paar aus Block 2. Da ich aber Block 1 und Block 2 wie folgt nebeneinander stehen will ist das nicht gut.

Name, Anzahl Block 1, Anzahl Block 2
Alfred, 10, 20
Max, 30, 40

Die erste Abfrage dauert vergleichsweise lange. Mir geht es jetzt darum die Abfrage zu optimieren. Wie schaffe ich es das in der ersten Abfrage auch nur die notwendigen Zeilen 6604 durchlaufen werden?

Gibt es noch andere Optimierungstips?
Mit Zitat antworten