alextr98: (Default)
[personal profile] alextr98
Возникли вопросы оптимизации JOIN .
Медленно работает, зараза.

запустить query analyzer

Date: 2009-01-08 02:39 pm (UTC)
From: [identity profile] izhbullet.livejournal.com
в нём посмотреть план исполнения
на вскидку - все поля по которым происходит join должны быть приндексированы
ну понятно что условием join а желательно должно быть равенство полей

кароче запрос - в студию!

Re: запустить query analyzer

Date: 2009-01-08 02:46 pm (UTC)
From: [identity profile] alextr98.livejournal.com
Все JOINы проиндексированы 100%.
Условие - равенство, естественно.
Такие детские штучки мы уже исследоваи :-)

Вот запросик нехороший (писал не я, честно) SELECT вставлен внутри:

ALTER VIEW dvLastReleaseDateTransactionNumber
AS
Select sr.ShipmentID,
r.TransactionNumber,
Max(r.ReleaseAckDateTime) as 'DateTime',
(Select Status From Release
Where TransactionNumber = r.TransactionNumber
And ReleaseAckDateTime = Max(r.ReleaseAckDateTime)) as 'Status'
From dbo.Release r Inner Join ShipmentReference sr
On Cast(r.TransactionNumber as varchar) = sr.ReferenceValue
Group By ShipmentID, TransactionNumber


Re: запустить query analyzer

Date: 2009-01-08 02:59 pm (UTC)
From: [identity profile] izhbullet.livejournal.com
мда.. при таких аггрегатах непонятно почему на join ы грешите..

однако Cast(r.TransactionNumber as varchar) очевидно может погубить использование индексов на корню..

на и понятно что всё что max и group также должно быть проиндексировано

почему кстати Max два раза?
в общем план выполнения нужно смотреть..
вот навскидку не понимаю что вложенный запрос берёт за Max(r.ReleaseAckDateTime))
нельзя на него как на 'DateTime' сослаться?

Re: запустить query analyzer

Date: 2009-01-08 03:04 pm (UTC)
From: [identity profile] alextr98.livejournal.com
Вот и пытаюсь его раскорячить ...
Пролетарий, который писал всё дело, давно уж не работает.
CAST появился, потому как он в одной таблице одно и то же число держит как VARCHAR, а в другой - как INT.
Короче, кривизна ужасная.

В общем, не сушите больше себе голову этой ерундой.
Мне за это деньги таки платят, так что я буду дальше разгребать ...
И вообще, есть у меня китаец под началом - только очень некреативнй.

Re: запустить query analyzer

Date: 2009-01-08 03:07 pm (UTC)
From: [identity profile] izhbullet.livejournal.com
да я собственно не сушу
но Query analyzer и план выполнения он не для того чтобы оптимизатор включать
он для того чтобы проверять что оптимизатор правильно всё оптимизировал, а если оптимизирует неправильно, то подсказать как хотелось бы оптимизировать..

типы по которым join нужно приводить к общему типу.. по любому..

типы по которым join

Date: 2009-01-08 03:12 pm (UTC)
From: [identity profile] alextr98.livejournal.com
Да, спасибо, буду базу данных курочить ...

Re: запустить query analyzer

Date: 2009-01-08 02:59 pm (UTC)
From: [identity profile] alextr98.livejournal.com
И оптимизатор у него работает.
Один и тот же запрос - первый раз 40 секунд.
Второй и дальше - 8 секнуд.

Profile

alextr98: (Default)
alextr98

March 2026

M T W T F S S
      1
234 5678
9101112131415
16171819202122
232425 26272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags