PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   MySQL Performance? (http://www.selfphp.de/forum/showthread.php?t=19447)

Tim22 25.05.2008 23:20:57

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?


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:59:09 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.