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

Откуда:
Сообщений: 170
Пишу запрос с несколькими джойнами (все INNER). Таблицы с проводками - миллионы записей.

SELECT ..., sum(...)
FROM ...
JOIN ...
JOIN ...
JOIN ...
WHERE Date BETWEEN '2009-05-01' AND '2009-05-31'
GROUP BY ...
Отрабатывает быстро (3-4 сек)

А совершенно тот же запрос, но с переменными:
declare @df datetime, @dt datetime
set @df = '2009-05-01'
set @dt = '2009-05-31'

SELECT ..., sum(...)
FROM ...
JOIN ...
JOIN ...
JOIN ...
WHERE Date BETWEEN @df AND @dt
GROUP BY ...
затягивается секунд на 40.

И экзекюшн планы получаются разные: во втором случае сначала происходят все джойны, а в последнюю очередь накладывается период.
Почему так? Помогите разобраться. И что с этим сделать.
17 июн 09, 17:42    [7312127]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться быстродействием запроса - одинаковые запросы отрабатывают по-разн  [new]
Paranoik
Member

Откуда:
Сообщений: 170
2005, если что..
17 июн 09, 17:48    [7312170]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться быстродействием запроса - одинаковые запросы отрабатывают по-разному  [new]
x-x
Member

Откуда:
Сообщений: 230
Paranoik,
Потому, что в первом случае есть конкретные значения, а во втором неизвестные параметры.
В первом случае оптимизатор смотрит статистику и может определить количество значений для условий BETWEEN '2009-05-01' AND '2009-05-31'
Во втором он не знает сколько строк вернется и считает среднюю избирательность по столбцу.

Варианты :
обновить статистику
динамический запрос
OPTIMIZE FOR
если процедура - то посмотрите на этом сайте есть статья о применении параметров в процедурах
17 июн 09, 18:12    [7312344]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться быстродействием запроса - одинаковые запросы отрабатывают по-разн  [new]
Paranoik
Member

Откуда:
Сообщений: 170
Спасибо, причина понятна. Бум думать
17 июн 09, 18:44    [7312471]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить