Optimierung meiner Abfrage geschlossen 

Status
Für weitere Antworten geschlossen.

karschti

Registered +
Registriert
Aug. 2008
Beiträge
6
Servus.

Ich habe mir folgende View gebastelt:

Code:
CREATE VIEW `MarktStatistik`.`view_Item_Markt` AS
SELECT iditems,itemName,itemUnique,itemVG ,
(SELECT COUNT(*) FROM forakesh WHERE items_iditems = i.iditems ) AS anzMarkt,
(SELECT itemMarktDatum FROM forakesh WHERE items_iditems = i.iditems ORDER BY itemMarktDatum ASC LIMIT 0,1) AS altMarkt,
(SELECT itemMarktDatum FROM forakesh WHERE items_iditems = i.iditems ORDER BY itemMarktDatum DESC LIMIT 0,1) AS neuMarkt,
(SELECT SUM(itemGold) / count(*) FROM forakesh WHERE items_iditems = i.iditems) AS dsGOLD,
(SELECT itemGold FROM forakesh WHERE items_iditems = i.iditems ORDER BY itemMarktDatum ASC LIMIT 0,1) AS hGold,
(SELECT itemGold FROM forakesh WHERE items_iditems = i.iditems ORDER BY itemMarktDatum DESC LIMIT 0,1) AS nGold,
(SELECT SUM(itemZustand) / COUNT(*) FROM forakesh WHERE items_iditems = i.iditems) AS dsZustand,
round (
(
UNIX_TIMESTAMP( NOW() ) -
UNIX_TIMESTAMP((SELECT itemMarktDatum FROM forakesh WHERE items_iditems = i.iditems ORDER BY itemMarktDatum ASC LIMIT 0,1))
) / (SELECT COUNT(*) FROM forakesh WHERE items_iditems = i.iditems ) / 3600

) AS dsStd
FROM items AS i
WHERE
i.iditems IN (SELECT items_iditems FROM forakesh)

Diese funktioniert recht gut, aber ist von der Performance her recht anspruchsvoll. Bei der Itemtabelle befinden sich ca. 5500 und der Forakeshtabelle 17500 Einträge. Die Anzahl ist steigend. Zur Zeit benötigt die Abfrage ca. 2,5 bis 3,5 Sekunden.

Könnt Ihr mir bei der Optimierung helfen? Wenn ja, wie? :)
 
Hi,
und OMG. Das ist mal die schlimmste Abfrage, die ich je gesehen habe :D
Ich würde dir Raten erstmal eine Abfrage, in der du COUNT, MAX, MIN und SUM benutzt zu tätigen.
So hast du schon mal 7 Abfragen rausgeschmissen. Das mit dem itemGold würde ich auch rausschmeißen und in einem seperaten Query machen (2 zu 1).
Außerdem solltest du mit ROUND und den ganzen Mist, nicht den MySQL-Server belasten, sprich diese in deiner Programmiersprache tätigen.
So sieht das alles schon mal besser aus und anstatt 11, nur noch 4 Abfragen.

Alles andere liegt an deiner SQL-Struktur. Wenn du nur so an die Werte kommst, ist das meiner Meinung nach, eher eine schlechte Struktur ^^

Gruß
Broken Sword
 
Zuletzt bearbeitet von einem Moderator:
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten