I przy użyciu kolejnych zapytań ekstrakcji górne 100 i 101 linii z dB gettings następujące upływający czas, który całkowicie różni się (drugie zapytanie ~ 8 wolniej niż pierwszy)niskiej zapytanie wydajności podczas używania zmiennych bazy
SELECT TOP (100) *
FROM PhotoLike WHERE [email protected] AND accountId<>@accountId
ORDER BY createDate DESC
GO
SQL Czasy wykonania serwera: Czas procesora = 187 ms, czas, który upłynął = 202 ms.
SELECT TOP (101) *
FROM PhotoLike WHERE [email protected] AND accountId<>@accountId
ORDER BY createDate DESC
GO
SQL Server Execution Times: czas CPU = 266 ms, czas, jaki upłynął = 1644 ms.
Plan Wykonanie pierwszych dwóch przypadkach:
Ale gdybym pozbyć zmiennej @accoundId, mam następujące wyniki, co w przybliżeniu równa się szybciej i więcej niż 2 razy niż pierwszego zapytania z tym pytaniem.
SELECT TOP (100) *
FROM PhotoLike WHERE photoAccountId=10 AND accountId<>10
ORDER BY createDate DESC
GO
SQL Server Execution Times: czas CPU = 358 ms, czas, jaki upłynął = 90 ms.
SELECT TOP (101) *
FROM PhotoLike WHERE photoAccountId=10 AND accountId<>10
ORDER BY createDate DESC
GO
SQL Server Execution Times: czas CPU = 452 ms, czas, jaki upłynął = 93 ms.
Plan Wykonanie drugich dwóch przypadkach:
Dlaczego tak się stało i jak mogę poprawić wydajność z varibales?
UPDATE
Dodane plany wykonania.
Czy obejrzałeś plan wykonania? – Brandon
'TOP 100/TOP 101' jest znanym problemem, patrz [ten blog] (http://www.mssqltips.com/sqlservertip/2053/trick-to-optimize-top-clause-in-sql-server/). Redukcja prędkości z parametrami jest prawdopodobnie spowodowana [parametrem sniffing] (http://blogs.technet.com/b/mdegre/archive/2012/03/19/what-is-parameter-sniffing.aspx). –
@ NikolaMarkovinović - Jest to przeciwieństwo sniffowania parametrów, zmienne nie są sniffowane, chyba że używa się opcji "OPTION (RECOMPILE)", więc po prostu generuje ogólne przypuszczenie nie oparte na rzeczywistych wartościach. Zachowanie "TOP 101" [nie zawsze jest problemem] (http://sqlblog.com/blogs/paul_white/archive/2010/08/27/sorting-row-goals-and-the-top-100-problem .aspx), chociaż wygląda tak, jak w tym przypadku. Jest to punkt odcięcia między pełnym sortowaniem a sortowaniem "TOP N". –