In Sql Server 2005, wenn ich mehrere Parameter habe ich die Garantie, dass der Evaluierungsauftrag immer von links nach rechts sein?Wählen Sie "where clause" Bewertungsreihenfolge
Anhand eines Beispiels:
select a from table where c=1 and d=2
In dieser Abfrage, wenn die "c = 1" Zustand der Zustand "d = 2" nicht wird nie ausgewertet werden?
PS- „c“ eine ganze Zahl indizierte Spalte, ist d eine große varchar und nicht lösbaren Spalte, die
Update einen vollständigen Tabellenscan erfordert ich habe versucht, zwei Abfragen oder bedingte Anweisungen zu vermeiden Durchführung I Ich brauche nur etwas wie: Wenn "c condition" fehlschlägt, gibt es eine Möglichkeit, die schwere "d-Bedingung" zu vermeiden, da sie in meinem Fall nicht benötigt wird.
Obwohl nicht explizit in meiner Frage die "Suche nicht indizierte Spalte unter den gefundenen Elementen in der indizierten Spalte" Problem war auch in meinen Gedanken. In meinem Fall entspricht es meinen Bedürfnissen völlig, weil das Abfragen der indizierten Spalte zuerst nur eine kleine Menge von zu filternden Datensätzen lässt, was kein Problem ist. – t3mujin
Denken Sie nur an meinen letzten Satz: Der Optimierer kann für jede Ausführung einen anderen Abfrageplan wählen . Es gibt Möglichkeiten, Pläne zu "pinnen" und auch Hinweise zum Optimierer anzugeben; Ich weiß nicht, wie diese in MS-SQL funktionieren. – kdgregory
Der Sinn der Verwendung einer deklarativen Sprache besteht darin, dass das System den besten Ausführungsplan für Sie ermittelt.Optimierer tendieren dazu, mit den aktuellen Statistiken in Ordnung zu kommen; etwas, das "eddies" genannt wird, kann theoretisch ohne Statistiken funktionieren - aber sie sind eine neuere Erfindung und möglicherweise nicht in MS-SQL. – SquareCog