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

Откуда:
Сообщений: 63
Ситуация странная есть запрос, который при разных зyачениях ID в условии работает либо 0 либо 4 секунды.
Планы запросов абсолютно идентичные.
Индексы на таблице пересоздавал, статистику обновлял.
Сам запрос:
select eventSum = isnull((select sum(Qty) from entry
(index = XIF463Entry)
where accountID=a.ID
and (entryDate between spd.periodStart and spd.PeriodEnd
)
and entryType > 0
),0),
paymentSum = isnull((select sum(Qty) from entry
(index = XIF463Entry)
where accountID=a.ID
and (entryDate between spd.periodStart and spd.PeriodEnd
)
and isnull(entryType,0) = 0
),0)
from Subscriber s
join subscriberPeriodData spd on spd.subscriberID = s.ID
join Account a on a.SubscriberID = s.ID
where s.ID = 372920
and a.accType in (4,5)
order by spd.periodStart desc


Итого если s.ID заменить на 372923 все летает, план не меняется. Как такое может быть?
Пока найдено только одно значение на котором стопор - s.ID = 372920
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)


Ссылка на 1 план
https://fotki.yandex.ru/next/users/maldalik/album/445580/view/926844
Ссылка на 2 план
https://fotki.yandex.ru/next/users/maldalik/album/445580/view/926843

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

Откуда:
Сообщений: 104751
maldalik
Итого если s.ID заменить на 372923 все летает, план не меняется. Как такое может быть?

Меньше итераций в Nested Loop - меньше время выполнения
Меньшее число читаемых данных - меньше время выполнения
Толщину стрелок видите ?
21 янв 15, 11:52    [17147544]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения при одинаковом плане  [new]
maldalik
Member

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

А почему их меньше то?
Почему вдруг для этого ID требуется гораздо больше данных вычитать?
С остальными же все ок.
22 янв 15, 06:56    [17151941]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения при одинаковом плане  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
maldalik
А почему их меньше то?
Почему вдруг для этого ID требуется гораздо больше данных вычитать?
В таблице entry для данного ID больше записей.

Конечно, разница большая во времени, ну, видимо, такая огромная разница в количестве.

Причём фильтр у вас после лукапа (в индексе нет полей, что бы отобрать записи), поэтому серверу нужно найти очень-очень много записей, потом полукапить их все, и потом фильтром отобрать небольшое количество нужных.

Просто посмотрите запросы:
select count(*) 
 join subscriberPeriodData spd on spd.subscriberID = s.ID
 join Account a on a.SubscriberID = s.ID
 join entry e on e.accountID=a.ID
 where s.ID = 372920
 and a.accType in (4,5)

select count(*) 
 join subscriberPeriodData spd on spd.subscriberID = s.ID
 join Account a on a.SubscriberID = s.ID
 join entry e on e.accountID=a.ID
 where s.ID = 372923
 and a.accType in (4,5)
22 янв 15, 08:37    [17152078]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения при одинаковом плане  [new]
aleks2
Guest
alexeyvg
В таблице entry для данного ID больше записей.

Конечно, разница большая во времени, ну, видимо, такая огромная разница в количестве.

1. Кроме количества есть ишо диск.
Если страницы вытеснены из памяти - будем читать с диска - долго.
Иначе - быстро.

2. А ишо есть сканирование. Можно долго сканировать, а можно сразу найти.
22 янв 15, 09:15    [17152185]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения при одинаковом плане  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
aleks2
2. А ишо есть сканирование. Можно долго сканировать, а можно сразу найти.
В плане Seek
22 янв 15, 09:19    [17152196]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения при одинаковом плане  [new]
aleks2
Guest
alexeyvg
aleks2
2. А ишо есть сканирование. Можно долго сканировать, а можно сразу найти.
В плане Seek

Я свои то планы не смотрю, разве тока под дулом пистолета...
22 янв 15, 09:23    [17152219]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения при одинаковом плане  [new]
maldalik
Member

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

Спасибо картинка становится понятной, единственное что непонятно:

автор
Причём фильтр у вас после лукапа (в индексе нет полей, что бы отобрать записи), поэтому серверу нужно найти очень-очень много записей, потом полукапить их все, и потом фильтром отобрать небольшое количество нужных.


На таблице entry есть индексы на все поля. и на account и на entrydate, и даже составной, почему тут не юзается индекс?

CREATE INDEX [XIF463Entry] ON [dbo].[Entry]([AccountID], [EntryDate]) WITH FILLFACTOR = 80 ON [PRIMARY]
GO
CREATE INDEX [XIE3Entry] ON [dbo].[Entry]([BillingEventID]) WITH FILLFACTOR = 80 ON [PRIMARY]
GO
CREATE INDEX [XIE2Entry] ON [dbo].[Entry]([EntryDate]) WITH FILLFACTOR = 80 ON [PRIMARY]
GO
CREATE INDEX [IX_Entry] ON [dbo].[Entry]([AccountID]) ON [PRIMARY]
GO
22 янв 15, 12:43    [17153489]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения при одинаковом плане  [new]
Glory
Member

Откуда:
Сообщений: 104751
maldalik
и даже составной, почему тут не юзается индекс?

И как помогут эти индексы, если позапросам нужны 4 поля
Откуда вот сервер в этих индексах возьмет Qty ?

ЗЫ
И ваши 2 подзапроса нужно переписать в один - зачем два раза та читать таблицу/индекс
22 янв 15, 12:50    [17153539]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить