Hallo,
ich habe zwei Tabellen mit folgenden Feldern:
Daten:
KatalogID | Nummer | Anzahl
Grunddaten:
Block | KatID | Nummer
Jetzt möchte ich beide miteinander Verbinden. Dazu habe ich eine Abfrage wie folgt erstellt. Mein Problem, die Abfrage dauert ca. 30 Sekunden. Kann man das irgendwie optimieren?
Die Tabelle Grunddaten (gdaten) enthält ca. 300.000 Datensätze.
Als Schlüssel sind die folgenden Spalten definiert:
Grunddaten:
Index1: Block, KatID, Nummer
Index2: KatID, Nummer
Daten:
Index1: KatalogID, Nummer
Die Explain Anweisung zeigt folgendes:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE gdaten range Index Index 8 NULL 311988 Using where; Using temporary; Using filesort
1 SIMPLE daten ref ID ID 16 daten.KatalogID,daten.Nummer 6 Using where
ich habe zwei Tabellen mit folgenden Feldern:
Daten:
KatalogID | Nummer | Anzahl
Grunddaten:
Block | KatID | Nummer
Jetzt möchte ich beide miteinander Verbinden. Dazu habe ich eine Abfrage wie folgt erstellt. Mein Problem, die Abfrage dauert ca. 30 Sekunden. Kann man das irgendwie optimieren?
Code:
SELECT LEFT( daten.Nummer, 2 ) AS DN, SUM(
CASE WHEN gdaten.BLOCK =1
THEN daten.ANZAHL
END ) AS A1, SUM(
CASE WHEN gdaten.BLOCK =2
THEN daten.ANZAHL
END ) AS A2
FROM (
gdaten
LEFT JOIN daten ON ( gdaten.KatID = daten.KatalogID )
AND (
gdaten.Nummer = daten.Nummer
)
)
GROUP BY LEFT( daten.Nummer, 2 )
ORDER BY A1 ASC
LIMIT 0 , 21
Die Tabelle Grunddaten (gdaten) enthält ca. 300.000 Datensätze.
Als Schlüssel sind die folgenden Spalten definiert:
Grunddaten:
Index1: Block, KatID, Nummer
Index2: KatID, Nummer
Daten:
Index1: KatalogID, Nummer
Die Explain Anweisung zeigt folgendes:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE gdaten range Index Index 8 NULL 311988 Using where; Using temporary; Using filesort
1 SIMPLE daten ref ID ID 16 daten.KatalogID,daten.Nummer 6 Using where