Я запускаю хранимую процедуру на SQL Server 2005 и вызывая ее из приложения VB.net.Параметры хранимой процедуры SQL Server влияют на скорость запроса - почему?
Эта хранимая процедура длилась 3 минуты, и я начал работать над ее ускорением. Совершенно случайно я наткнулся на решение, которое сократило время работы от 3 минут до 3 секунд (без шуток, я серьезно).
Но я не понимаю, почему.
Единственные 2 параметры, которые я прохожу являются дата начала и дата окончания (используется в предложении WHERE
), а так:
ALTER PROCEDURE get_OrderLinessByRegion
@DateFrom DATETIME,
@DateTo DATETIME
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
blah, blah, blah
Хотя некоторые испытания я обнаружил, что, когда я жёстко даты в хранимой процедуры время выполнения сократилось от 3 минут до 3 секунд.
Я закончил с этим:
ALTER PROCEDURE get_OrderLinessByRegion
@DateFrom DATETIME,
@DateTo DATETIME
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @StartDate AS DATETIME
DECLARE @EndDate AS DATETIME
SET @StartDate = @DateFrom
SET @EndDate = @DateTo
blah, blah, blah
Может кто-нибудь сказать мне, почему вторая версия работает намного быстрее?
Большое спасибо!
Это плохой параметр нюхания параметров. http://sqlinthewild.co.za/index.php/2007/11/27/parameter-sniffing/ –
Хмм, я никогда не слышал о том, как обнюхать параметр раньше, поэтому я нашел google и нашел эту статью: https: // www .simple-talk.com/SQL/T-SQL-программирование/параметр обнюхивать /. Почему параметр sniffing возникает, когда параметры определены как DATETIME? Кажется, что план выполнения всегда должен быть одинаковым для этого типа данных? – user3511334
Да, это еще одна хорошая статья по этой теме. –