Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 план запроса с параметрами  [new]
Rem
Member

Откуда:
Сообщений: 261
Почему в первом случае идёт Table Scan, а во втором задействуется индекс по btrv_date и Index Seek + RID LookUp ?

declare @Date1 smalldatetime
declare @Date2 smalldatetime

select @Date1 = '20131021'
select @Date2 = '20131021'

select btrv_date, DebAccountID as AccountID, 0 as SumDeb, [Sum] as SumCre, 0 As SumDebBs, SumBs As SumCreBs
   from docblc
   where
      btrv_date between @Date1 and @Date2

select btrv_date, DebAccountID as AccountID, 0 as SumDeb, [Sum] as SumCre, 0 As SumDebBs, SumBs As SumCreBs
   from docblc
   where
      btrv_date between '20131021' and '20131021'


PS
Microsoft SQL Server 2005 - 9.00.5069.00 (X64) Aug 22 2012 18:02:46 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)
22 окт 13, 11:07    [15012761]     Ответить | Цитировать Сообщить модератору
 Re: план запроса с параметрами  [new]
Glory
Member

Откуда:
Сообщений: 104751
Rem
Почему в первом случае идёт Table Scan, а во втором задействуется индекс по btrv_date и Index Seek + RID LookUp ?

Потому что во 2ом случае оптимизатор, зная значение констант, смог использовать статистику распределения для этих конкретных значений
А в 1ом случае оптимизатор строил план для общего распределения всех значений
22 окт 13, 11:10    [15012785]     Ответить | Цитировать Сообщить модератору
 Re: план запроса с параметрами  [new]
Rem
Member

Откуда:
Сообщений: 261
Glory,
У меня выборки за короткие периоды, пришлось хинтом указать конкретный индекс. Только после этого удалось достичь приемлимого результата.

Не совсем понятно, почему в ходе выполнения, когда значения параметров уже известны, сиквел использует неэффективный план.
Не может это быть связано с тем, что шаловливые ручки навертели кучу индексов для этой таблицы?
22 окт 13, 13:08    [15014043]     Ответить | Цитировать Сообщить модератору
 Re: план запроса с параметрами  [new]
"до"
Guest
Rem,

потму что план строится не "в ходе выполнения", а "до"
22 окт 13, 13:25    [15014228]     Ответить | Цитировать Сообщить модератору
 Re: план запроса с параметрами  [new]
Rem
Member

Откуда:
Сообщений: 261
"до",

До момента выполнения последних двух запросов значения параметров уже известны.
22 окт 13, 13:44    [15014463]     Ответить | Цитировать Сообщить модератору
 Re: план запроса с параметрами  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Rem,

План строится сразу для всего батча целиком. Если вы хотите, чтобы какой-либо стейтмент перекомпилировался во время выполнения (при этом оптимизатор сможет использовать актуальные значения переменных), то можете, например, дописать в нужном стейтменте OPTION(RECOMPILE).
22 окт 13, 13:51    [15014552]     Ответить | Цитировать Сообщить модератору
 Re: план запроса с параметрами  [new]
Glory
Member

Откуда:
Сообщений: 104751
Rem
До момента выполнения последних двух запросов значения параметров уже известны.

Откуда они известны, если план строится до выполнения пакета ?
22 окт 13, 14:02    [15014651]     Ответить | Цитировать Сообщить модератору
 Re: план запроса с параметрами  [new]
Rem
Member

Откуда:
Сообщений: 261
Гость333
Rem,

План строится сразу для всего батча целиком. Если вы хотите, чтобы какой-либо стейтмент перекомпилировался во время выполнения (при этом оптимизатор сможет использовать актуальные значения переменных), то можете, например, дописать в нужном стейтменте OPTION(RECOMPILE).


Спасибо. Это меня и интересовало.
22 окт 13, 17:04    [15016314]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить