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

Откуда:
Сообщений: 1
Есть два запроса, в одном в качестве фильтра по датам используются переменные, в другом задаются непосредственно сами даты.

1.
declare @Rdate datetime
set @Rdate = '20140314'
declare @ag_Id int
select @ag_Id = ag_Id from agents with(nolock) where ag_Guid = 'BEFCE471-ECBD-4DDA-B1AE-DCDFC43BB2E4'

declare @sd datetime
declare @ed datetime

set @sd =  '20140304'-- Dateadd(dd, -10, @RDate)
set @ed =  '20140319'--Dateadd(dd, 5, @Rdate)

SELECT  distinct D.DOC_ID, D.DOC_PL3 
from 
documents d with(nolock)
inner join journal j with(nolock) on  j.doc_id = d.doc_id and acc_cr = 335 
inner join jrn_misc jm with(nolock) on j.j_id = jm.j_id and jm.msc_no = 11 and jm.msc_id =  @ag_id
and j_date between @sd and @ed


2.
declare @Rdate datetime
set @Rdate = '20140314'
declare @ag_Id int
select @ag_Id = ag_Id from agents with(nolock) where ag_Guid = 'BEFCE471-ECBD-4DDA-B1AE-DCDFC43BB2E4'

declare @sd datetime
declare @ed datetime

set @sd =  '20140304'-- Dateadd(dd, -10, @RDate)
set @ed =  '20140319'--Dateadd(dd, 5, @Rdate)

SELECT  distinct D.DOC_ID, D.DOC_PL3 
from 
documents d with(nolock)
inner join journal j with(nolock) on  j.doc_id = d.doc_id and acc_cr = 335 
inner join jrn_misc jm with(nolock) on j.j_id = jm.j_id and jm.msc_no = 11 and jm.msc_id =  @ag_id
--and j_date between @sd and @ed
and j_date between '20140304' and '20140319'


Данные запросы должны выбирать по 218 записей, они их и выбирают, но с разным временем исполнения. Первый запрос работает в два раза медленнее, чем второй. Хотелось бы понять, почему. Выкладываю планы:

К сообщению приложен файл. Размер - 148Kb
14 мар 14, 11:45    [15722691]     Ответить | Цитировать Сообщить модератору
 Re: Разный план выполнения  [new]
Glory
Member

Откуда:
Сообщений: 104751
sql_Bot
Первый запрос работает в два раза медленнее, чем второй. Хотелось бы понять, почему.

Первый запрос построен для неизвестных значений @sd и @ed.
А второй - для известных констант, для которых легко определить статистику распределения
14 мар 14, 11:50    [15722720]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить