2009-08-22 4 views
0

Die Anwendung der Abfrage wurde geändert, aber die Theorie ist dieselbe.sybase - showplan lässt geschätzte E/A stark fallen, indem eine weitere Tabelle zur Abfrage hinzugefügt wird

4 Tabellen:

Staaten - Liste der Staaten (Index Zustand) Geschäfte - Geschäfte, und der Staat sie in sind (getrennter Indizes für Zustand, speichert) store_orders - ties einen Auftrag an einen Speicher (separate Indizes für Filiale, Auftrag) order_statuses - hat Auftrag und Status (separate Indizes für Auftrag, Status)

Ich möchte zählen, wie viele Aufträge in jedem Status für einen bestimmten Status vorliegen.

Eine Abfrage:

wählen os.order_status, count (os.order_status) von Geschäften sto, store_order so, order_statuses os wo sto.state = 'PA' und sto.store = so.store und so.order = os.order Gruppe von os.order_status

in der realen Anwendung, eine Showplan hier kommt zurück mit geschätzten I/O von rund 500.000

Aber wenn ich tun:

wählen os.order_status, count (os.order_status) aus Staaten sta, speichert sto, store_order so, order_statuses os wo sta.state = 'PA' wo sto.state = sta.state und sto.store = so.store und so.order = os.order Gruppe von os.order_status

Das I/O wird auf rund 2000 geschätzt und alles, was ich die Abfrage tat zu ändern war, die Zustände Tabelle in der Tabelle stores beitreten , und geben Sie den genauen Wert in den Status statt in den Speichern an.

Muss das DBM nicht immer die gleiche Suche in Stores durchführen, wenn ich einen expliziten Wert festlege, oder schließe ich eine andere Tabelle mit diesem expliziten Wert an?

Ich versuche herauszufinden, warum die geschätzte I/O ist so viel höher.

Ich bin kein DBA, aber ich versuche so viel wie möglich zu lernen, weil ich die ganze Zeit auf solche Dinge treffe, und ich bin mir nie ganz sicher warum.

+0

Die Showplan geben laufen konnte Details von dem, was es tut, nicht wahr erklären, warum die IO unterscheidet? – Mark

+0

Ich ging durch die zwei showplans, und die gleichen Indizes werden verwendet, Seitengrößen waren die gleichen, usw.Der einzige Unterschied, den ich sah, war die zusätzliche Tabelle und die gesamte I/O. Der sybase showplan zeigt nur Gesamt-I/O, nicht einzelne von einer Tabelle oder einem anderen. –

Antwort

3

Faule Bob, Können Sie bitte auch wiederum IO Statistiken über und dann die Ergebnisse auf die Frage hinzu:

set statistics io auf

Showplan für sich allein nicht, dass Informationen, wie Sie geben in den Kommentaren

auch, bitte posten genau arbeiten Abfrage - im Idealfall richtig formatiert.

Ihre Anfrage sagt „wo sta.state =‚PA‘where sto.state = sta.state“ und offensichtlich etwas nicht Sie

+0

Danke DVK ... das war genau der Befehl den ich brauchte. Nach dem Überprüfen der * tatsächlichen * E/A-Statistiken stellt sich heraus, dass das Hinzufügen der zusätzlichen Tabelle tatsächlich zu höheren E/A-Kosten führt. –

+0

OK, können Sie die genaue Ausgabe der E/A-Ergebnisse und Abfragepläne beider Abfragen ausgeben, um herauszufinden, warum E/A durch Hinzufügen einer Tabelle abstürzt? (wahrscheinlich gibt es weniger Scans von einigen großen Tabellen) – DVK

Verwandte Themen