Index bei verschachtelten Abfragen

fidibus

Neuer Benutzer
Beiträge
2
Hallo,

bin neu hier Forum, habe eine Frage zu einer verschachtelten Abfrage, die mir die Abfrageperfomance etwas verhagelt:

Code:
 SELECT DISTINCT `Day` , `Tmax` , `Tmin` , left( `Wcode` , 1 ) AS Wcode, `Wtxt` , `Rain` , `WindDir` , `WindDirtxt`
FROM `daily_data`
WHERE id
IN (

SELECT max( id )
FROM `daily_data`
GROUP BY DAY
)
ORDER BY `daily_data`.`Day`

Explain liefert mir folgendes Ergebnis:

Code:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY daily_data ALL NULLNULLNULLNULL2665 Using where; Using temporary; Using filesort
2 DEPENDENT SUBQUERY daily_data index NULLDay 3 NULL24 Using index

Meine Frage, wieso wird bei der Subquery 'Day' als Key verwendet, und bei der Primary Query nicht? Wäre echt toll, wenn mir jemand weiterhelfen könnte.

Viele Grüße
Fidibus
 
Werbung:
wieso wird bei der Subquery 'Day' als Key verwendet, und bei der Primary Query nicht?
Durch den Subselect erzeugst du eine temporäre Menge für die kein Index besteht.

verschachtelten Abfrage, die mir die Abfrageperfomance etwas verhagelt
Das passiert häufig bei Subselects. Deutlich performanter sind für gewöhnlich JOINS.

Versuchs mal damit:
Code:
SELECT A.*
FROM fidibus AS A
INNER JOIN  (
  SELECT Max(id) AS id
  FROM fidibus
  GROUP BY Day
) AS B
ON A.id = B.id
ORDER BY A.day
Passt natürlich noch nicht ganz. Aber das Prinzip sollte klar sein.

Gruß
Hony
 
Zuletzt bearbeitet:
Werbung:
Hallo,

vielen Dank für die Hilfe, klappt prima:

ALT:
Code:
Zeige Datensätze 0 - 29 ( 78 insgesamt, die Abfrage dauerte 3.8467 sek.) [Day: 2014-08-12 - 2014-09-10]

NEU:
Code:
Zeige Datensätze 0 - 29 ( 78 insgesamt, die Abfrage dauerte 0.0054 sek.) [Day: 2014-08-12 - 2014-09-10]


Viele Grüße
Fidibus
 
Zurück
Oben