@Noob_001

SQL тип данных ... ....?

Вопрос значит хитрый ...
Допустим есть запрос на выборку в очень большой базе за 1 день.
- 7 таблиц.
- 3 таблицы с условием на одну и туже дату (дабы много не дергать). p.s. в других таблицах даты нету.
(даты в таблицах типа - datetime)

2 варианта решения:

1) образный пример:

declare @d1 datetime
declare @d2 datetime
set @d1 = '05.02.2015'
set @d1 = '05.03.2015'
select sum(t.price * t.val) from test t
innrer ...
innrer ...
innrer ...
where
t.date between @d1 and @d2 and
t2.date between @d1 and @d2 and
t3.date between @d1 and @d2
...

2) Образный пример:

select sum(t.price * t.val) from test t
innrer ...
innrer ...
innrer ...
where
t.date between '05.02.2015' and '05.03.2015' and
t2.date between '05.02.2015' and '05.03.2015' and
t3.date between '05.02.2015' and '05.03.2015'
...

А теперь вопрос:
Пример №2 выполняется 1 сек (с ходу)
А вот пример №1 копия №2 только с использованием 2х переменных ... выполняется 5 минут.
Какой тип данных использовать в переменных дабы №1 отработал как же быстро как и №2?
  • Вопрос задан
  • 268 просмотров
Решения вопроса 1
@velnick
Рискну предположить, что проблема не в типах данных, а в планах исполнения и статистике SQL Server.
А вы случаной параметры не в хранику\функцию передаете? Может тут имеет место Parameter Sniffing?
www.brentozar.com/archive/2013/06/the-elephant-and...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы