Die fragliche Website funktioniert normalerweise ziemlich gut, aber mit der Zeit wird sie immer langsamer.Abfrage ist langsam, wird schnell nach "dbcc freeproproccache". Könnte es meine Parameter sein?
Wir haben eine riesige Abfrage, um die Produkte, die der Benutzer für die Suche zu finden, und sie sind meist in dieser Form:
WHERE ProductName LIKE @ProductName OR @ProductName IS NULL
AND ProductGroup LIKE @ProductGroup or @ProductGroup IS NULL
AND (...)
Auf diese Weise müssen wir alle Parameter nicht passieren, wenn wir suchen sind nur für die Produktnummer. Könnte das der Grund sein, dass die Abfragen langsamer werden? Etwas damit zu tun, dass die Abfrage das erste Mal zwischengespeichert wird, und das nächste Mal, wenn die Parameter geändert wurden, verwendet es den alten Abfrageplan?
Wenn ja; Was wäre der beste Weg, dies zu beheben? Dynamisches SQL?
haben Sie einen interessanten Fall vorgestellt. Ich dachte, dass ein führender Platzhalter in einer LIKE-Klausel (z. B. type LIKE '% f') den Index als nutzlos rendert. – peakit
@peakit - Der führende Platzhalter bedeutet, dass die Bereichsuche einen Bereich sucht, der aus dem gesamten Index besteht. Der Vorteil für SQL Server bei der Verwendung einer Bereichssuche im Plan besteht darin, dass der gleiche Plan verwendet werden kann, wenn ein nicht führender Platzhalter vorhanden ist und ein viel engerer Bereich gesucht wird. –