2015-07-13 5 views
1

Я запускаю хранимую процедуру на 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 

Может кто-нибудь сказать мне, почему вторая версия работает намного быстрее?

Большое спасибо!

+2

Это плохой параметр нюхания параметров. http://sqlinthewild.co.za/index.php/2007/11/27/parameter-sniffing/ –

+0

Хмм, я никогда не слышал о том, как обнюхать параметр раньше, поэтому я нашел google и нашел эту статью: https: // www .simple-talk.com/SQL/T-SQL-программирование/параметр обнюхивать /. Почему параметр sniffing возникает, когда параметры определены как DATETIME? Кажется, что план выполнения всегда должен быть одинаковым для этого типа данных? – user3511334

+0

Да, это еще одна хорошая статья по этой теме. –

ответ

Смежные вопросы