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

Откуда:
Сообщений: 37
Здравствуйте. Запутался я совсем
Имеется такой запрос

SELECT dbo.Payment.PaymentID, dbo.Payment.PaymentContractKod, dbo.WaterUser.WaterUserName, dbo.Payment.PaymentDate FROM dbo.Payment
INNER JOIN dbo.WaterUser ON dbo.Payment.PaymentContractKod = dbo.WaterUser.WaterUserKod
WHERE (dbo.Payment.RecType <> 2) AND (dbo.Payment.LangID = 0) AND (dbo.Payment.PaymentDate >= CONVERT(DATETIME, '2017-8-30', 102)) AND (dbo.Payment.PaymentDate <= CONVERT(DATETIME, '2017-9-30 23:59:59', 102))

В этом временном интервале запрос зависает причем кол-вом записей в нем порядка 700. Стоит изменить интервал начало поставить к примеру 2017-8-29 и меньше работает на ура причем кол во записей в этом случае в разы возрастает. Не знаю что и подумать.
Спасибо...
23 сен 17, 10:40    [20817819]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
982183
Member

Откуда: VL
Сообщений: 3349
Сколько записей в исходных таблицах?
23 сен 17, 10:46    [20817828]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
aseylanyan
Member

Откуда:
Сообщений: 37
Порядка 30000. Просто странно что тормозить начинает только в том случае если начальная дата интервала больше чем 29.08.2017.
23 сен 17, 10:52    [20817837]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
982183
Member

Откуда: VL
Сообщений: 3349
во второй сколько?
23 сен 17, 11:12    [20817849]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
aseylanyan
Member

Откуда:
Сообщений: 37
порядка 10000.
23 сен 17, 11:14    [20817850]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
982183
Member

Откуда: VL
Сообщений: 3349
А попробуй between вместо сравнений.
Чисто поржать. Может прокатит.
Видимо что-то во входных данных.
23 сен 17, 11:24    [20817859]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
aseylanyan
Member

Откуда:
Сообщений: 37
Не прокатило.
23 сен 17, 11:31    [20817866]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
Massa52
Member

Откуда:
Сообщений: 373
aseylanyan,
:)
WITH c AS
(SELECT dbo.Payment.PaymentID, dbo.Payment.PaymentContractKod,dbo.WaterUser.WaterUserName, 
	   dbo.Payment.PaymentDate 
FROM dbo.Payment INNER JOIN dbo.WaterUser ON dbo.Payment.PaymentContractKod = dbo.WaterUser.WaterUserKod
WHERE (dbo.Payment.RecType <> 2) AND (dbo.Payment.LangID = 0) AND 
              (dbo.Payment.PaymentDate >= CONVERT(DATETIME, '2017-08-29', 102)) 
		  AND (dbo.Payment.PaymentDate < CONVERT(DATETIME, '2017-10-01', 102))
)
SELECT * FROM c
WHERE
          (PaymentDate >= CONVERT(DATETIME, '2017-08-30', 102)) 
		  AND (PaymentDate < CONVERT(DATETIME, '2017-10-01', 102))
23 сен 17, 12:07    [20817911]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
aseylanyan
Member

Откуда:
Сообщений: 37
Увы :(
23 сен 17, 13:14    [20817947]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
gls
Member

Откуда:
Сообщений: 84
aseylanyan,
(nolock) ?
23 сен 17, 13:18    [20817948]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
982183
Member

Откуда: VL
Сообщений: 3349
сделай SELECT top
выведи некое количество строк на сбойных датах.
Посмотри что там не так получилось.
23 сен 17, 14:14    [20817977]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
SELECT P.PaymentID, P.PaymentContractKod, W.WaterUserName, P.PaymentDate
FROM dbo.Payment P JOIN dbo.WaterUser W ON P.PaymentContractKod=W.WaterUserKod
WHERE P.RecType<>2 AND P.LangID=0 AND P.PaymentDate>='20170830' AND P.PaymentDate<'20171001';
Что там с индексами?
23 сен 17, 18:33    [20818160]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
Сруль.
Member

Откуда:
Сообщений: 119
Если Вы не возражаете, я бы сперва пошёл
по пути упрощения запроса.
Если вы пишете дату строкой по формату
'годмесяцдень', то сервер лопает это без всяких там конвертов,
типа так

SELECT dbo.Payment.PaymentID, dbo.Payment.PaymentContractKod, dbo.WaterUser.WaterUserName, dbo.Payment.PaymentDate FROM dbo.Payment
INNER JOIN dbo.WaterUser ON dbo.Payment.PaymentContractKod = dbo.WaterUser.WaterUserKod
WHERE (dbo.Payment.RecType <> 2) AND (dbo.Payment.LangID = 0) AND (dbo.Payment.PaymentDate >= '20170830') AND (dbo.Payment.PaymentDate <= '20170930 23:59:59')

Конверт может сбить индекс с толку.
Обойдите этот угол-дальше видно будет.
При это невжно какой у сессии dateformat.
24 сен 17, 18:26    [20819087]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Сруль.,

вы - писатель?
24 сен 17, 18:40    [20819109]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
iii2
Member

Откуда:
Сообщений: 202
Пишите даты в правильном, инвариантном формате, пересчитайте статистику (она наверняка протухла). Посмотрите, что там с индексами.
У вас точно адхок запрос, в том виде, в котором вы написали, а не параметризованный?
24 сен 17, 19:08    [20819135]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
aseylanyan
Member

Откуда:
Сообщений: 37
Увы. Но вопрос так и не решился.
27 сен 17, 08:57    [20825693]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
Massa52
Member

Откуда:
Сообщений: 373
aseylanyan

Тут iap срашивает:
SELECT P.PaymentID, P.PaymentContractKod, W.WaterUserName, P.PaymentDate
FROM dbo.Payment P JOIN dbo.WaterUser W ON P.PaymentContractKod=W.WaterUserKod
WHERE P.RecType<>2 AND P.LangID=0 AND P.PaymentDate>='20170830' AND P.PaymentDate<'20171001';
Что там с индексами?
27 сен 17, 09:11    [20825711]     Ответить | Цитировать Сообщить модератору
 Re: Временной интервал  [new]
982183
Member

Откуда: VL
Сообщений: 3349
А если убрать JOIN и связь отразить в WHERE ?
27 сен 17, 09:44    [20825775]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить