Ich habe eine relativ einfach query:Warum erstellt mein Abfrageplan einen Index-Scan?
SELECT o.id
FROM dbo.table1 o
LEFT JOIN dbo.table2 n (NOLOCK)
ON o.first = n.second and n.first = @Var1
WHERE
(o.fourth in (@Var4, @Var5) or o.fifth = @Var6) AND
(o.first = @Var1 or n.first = @Var1) AND
(
o.second = @Var2 OR
o.second like (@Var2 + '[^a-zA-Z]%') OR
o.third like (@Var3 + '[^a-zA-Z]%')
)
Aber immer, wenn ich die Abfrage-Plan überprüfen, ich einen Index-Scan tue.
Der nicht gruppierten Index ich habe, ist (auf Tabelle 1):
First ASC,
Fourth ASC,
Fifth ASC,
Second ASC,
Third ASC
Include: id
Warum ein Scan? Bedeckt das nicht mein Index? Ich habe auch die richtigen Indizes für Tabelle2, also mache ich mir keine Sorgen.
Vielen Dank für jede Hilfe
Sinn macht. In diesem Fall habe ich keinen konkreten Ausgangspunkt. Wäre das Umschreiben der Abfrage eine bessere Option? – user2124871
@ user2124871 - schwer zu sagen, wenn alles so abstrakt ist. Wenn die Abfrage * logisch korrekt ist *, dann hat jede logische Neuerung, die auch logisch korrekt ist, wahrscheinlich genau denselben Abfrageplan. –
Also habe ich versucht, das Problem zu umgehen, aber genau wie du gesagt hast, habe ich den gleichen Abfrageplan. Die nächste Lösung besteht darin, dies in separate Abfragen aufzuteilen und die Ergebnisse zu verknüpfen. Vielen Dank für Ihren Beitrag - schätzen Sie es. – user2124871