2017-01-12 3 views
1

SQL Server 2014 (v13.0.4001.0) mit - das Beispielskript hängt:SELECT hängt, wenn eine Variable

DECLARE @from int = 0 
DECLARE @to int = 1000 

select 
    * 
from 
    TaskNote dtn 
join 
    Participants tp on dtn.Task_ID = tp.TaskId 
where 
    dtn.TaskNote_ID between @from and @to 

Aber wenn ich Variablen Konstanten ändern - es ist alles in Ordnung.

So:

where 
    dtn.DocTaskNote_ID between 0 and 1000 

Auch, wenn ich die Verbindung zu entfernen, alles ist in Ordnung.

Kann nicht herausfinden, wo das Problem

+0

anders optimiert? – jarlh

+4

Wenn eine Abfrage nicht mehr reagiert, sollten Sie den Ausführungsplan überprüfen. Wahrscheinlich verwenden Sie den Index nicht mehr und indexieren ihn nicht mehr. Alternativ wird ein Index für die Tabelle neu erstellt, weil Sie die Abfrage ausführen. Nur ein paar Dinge zu überprüfen! –

+0

Skript mit Variable und mit Konstanten hat verschiedene geschätzte Ausführungspläne. Aber kann nicht vergleichen tatsächlichen Ausführungspläne, weil Skript hängt – aleha

Antwort

1

Eine mögliche Ursache für das Problem ist, dass Sie, falls Ihre Abfrage liegt innerhalb einer gespeicherten Prozedur erwähnen, ist Parameter Sniffing. SQL Server kompiliert die Abfrage zum ersten Mal mithilfe der Anfangswerte der Parameter. In nachfolgenden Aufrufen der Prozedur verwendet die Engine den zwischengespeicherten Ausführungsplan, der für die aktuellen Variablenwerte wahrscheinlich nicht optimal ist.

Eine Abhilfe ist dieses Problem OPTION (RECOMPILE) verwenden:

select * 
from TaskNote dtn 
join Participants tp on dtn.Task_ID = tp.TaskId 
where dtn.TaskNote_ID between @from and @to 
option (recompile) 

diese Weise wird die Abfrage jedes Mal kompiliert wird die Prozedur der aktuellen Parameter-Werte ausgeführt werden.

Weiterführende Literatur:

+0

, wenn ich Skript mit dieser Option in While-Schleife, könnte es einige Leistungsabnahme sein? – aleha

+0

@aleha Sie sollten zuerst in Erwägung ziehen, die while-Schleife in eine Set-basierte Lösung zu konvertieren. –

Verwandte Themen