Query Optimierung (*g* zum Sonntag)
Frank (no reg)
- datenbank
Hallo, da ja morgen wieder die Arbeitswoche beginnt und ich "Ergebnisse liefern" soll ... wurde letzte Woche gebeten, eine Query zu optimieren, weil diese zu langsam lief (8sek). Leider verstehe ich diese SQL Query aber überhaupt nicht (bin in letzter Zeit weniger technisch aktiv sondern eher planerisch und könnte da vielleicht Dinge verlernt haben).
Tabelle: Instrument (Id int, Ticker varchar(32), MarketSector varchar(16), ArbitraryInformation varchar(2000))
Primary Key ist Id, Unique Key auf Ticker und MarketSector
Tabelle hat etwa 12000 Records
SELECT t1.Ticker, t1.MarketSector, 20, 0.075
FROM Instrument t1
INNER JOIN Instrument t2 ON 1=1
WHERE t1.Ticker = 'TY1' AND t1.MarketSector = 'Index'
AND t2.Ticker = 'TY1' AND t1.MarketSector = 'Index'
Wer hätte da einen Vorschlag? Mir ist am Freitag nachmittag nur noch eingefallen, ein Hardwareupgrade für den Datenbankserver vorzuschlagen. *g*
Vielen Dank im Voraus, ich wende mich denn mal dem Rasenschach zu.
Cheers, Frank
EXPLAIN kann dir hier Ansätze liefern.
Insbesondere frage ich mich wozu du einen m.M.n. überflüssigen Self-Join veranstaltest.
Wer hat die Query gemacht? Was soll sie liefern?
Ehrlich gesagt macht die Query überhaupt nichts großartiges, außer lauter gleiche und fest vorgegebene Felder zu liefern und das halt in einer Anzahl, die dem Kreuzprodukt der Vorkommen entspricht.
Hi,
nun in meiner Frage ging es ja um die Optimierung, nicht um die Korrektheit. Dächte, dass ich dies im Ausgangsposting klar geschrieben hätte. Die Dauer von 8sek pro Query war zu lang, da mehrere dieser Queries hintereinander ausgeführt worden sind.
Ehrlich gesagt macht die Query überhaupt nichts großartiges, außer lauter gleiche und fest vorgegebene Felder zu liefern und das halt in einer Anzahl, die dem Kreuzprodukt der Vorkommen entspricht.
Nicht ganz unfalsch, sie liefert genau 1 Record. Nachdem sie aus etwa 12000 Records ein grosses Kreuzprodukt gemacht hat um dann doch wieder nur den einen passenden draus zu selektieren. Der Hinweis von DiBo33 war da sehr treffend.
Im Übrigen hatte ich beim 2. t1.MarketSector noch 'nen Tippfehler, es sollte t2.Marketsector sein.
:-) Schönen Sonntag noch.
Frank
nun in meiner Frage ging es ja um die Optimierung, nicht um die Korrektheit. Dächte, dass ich dies im Ausgangsposting klar geschrieben hätte.
Ja das hast du schon. Aber eine Query erst mal überhaupt das richtige tun lassen ist doch der erste Schritt zur Optimierung ;-)