WITH (INDEX(ix_auftrag_knr))

27/04/2011 - 12:42 von Eckhard Sallermann | Report spam
MS SQLServer 2008 R2

Tach,

so dauert es 10 Sekunden

select a.knr , a.zuname
( select sum(verkauf) from auftrag..auftrag where knr = a.knr ) as summevk
from kunden..kunden a


so ( mit Angabe eines Indexes ) dauert es nur 1 Sekunde

select a.knr , a.zuname
( select sum(verkauf) from auftrag..auftrag WITH (INDEX(ix_auftrag_knr))
where knr = a.knr ) as summevk
from kunden..kunden a

Ich war eigentlich immer der Meinung, dass ein entsprechend vorhandener
Index automatisch zum Ermitteln der Daten herangezogen wird, irre ich
mich ?
 

Lesen sie die antworten

#1 Hannes Brunner
27/04/2011 - 23:20 | Warnen spam
Moin,

Am 27.04.2011 12:42, schrieb Eckhard Sallermann:
Tach,

so dauert es 10 Sekunden

select a.knr , a.zuname
( select sum(verkauf) from auftrag..auftrag where knr = a.knr ) as summevk
from kunden..kunden a

so ( mit Angabe eines Indexes ) dauert es nur 1 Sekunde

select a.knr , a.zuname
( select sum(verkauf) from auftrag..auftrag WITH (INDEX(ix_auftrag_knr))
where knr = a.knr ) as summevk
from kunden..kunden a

Ich war eigentlich immer der Meinung, dass ein entsprechend vorhandener
Index automatisch zum Ermitteln der Daten herangezogen wird, irre ich
mich ?



ja, da irrst du dich. Ein Index wird nur verwendet, wenn der Optimierer
es als sinnvoll erachtet. Wenn z.B. die Statistiken über den Index
aussagen, dass er nur wenig selektiv ist, findet dieser keine
Verwendung, da die Vermutung nahe liegt, dass der Umweg über den Index
nix bringt.

Kann also sein, dass die Statistiken veraltet sind. Probier doch mal,
was passiert, wenn du die per UPDATE STATISTICS auf aktuellen Stand bringst.

HTH
Hannes

Ähnliche fragen