Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Странно работает запрос. [D7, XP]


Семен Кевларвестов ©   (2008-11-26 18:36:00) 

Доброго вечера!

В TQuery есть запрос вида:

select T1.Table1ID,
        T2.Table2ID,
        T3.Table3ID
from table1 T1 (nolock)
left join table2 T2 (nolock) on T2.Table2ID = T1.Table2ID
left join table3 T3 (nolock) on T3.Table3ID = T2.Table3ID
where T2.Table2ID = @SomeParam1and
        T3.Table3ID = @SomeParam2

и в таком виде это работает очень медленно,

но если сделать так:


select T1.Table1ID,
        T2.Table2ID,
        T3.Table3ID
from table1 T1 (nolock)
left join table2 T2 (nolock) on T2.Table2ID = T1.Table2ID
left join table3 T3 (nolock) on T3.Table3ID = T2.Table3ID
where T1.Table2ID = @SomeParam1
        T3.Table3ID = @SomeParam2


то все начинает работать очень быстро.

В QueryAnalyzer все работает одинаково, по крайней мере я разницы не заметил. Почему так?


clickmaker   (2008-11-26 18:42:00) [1]

потому что во втором случае сначала отбираются записи в Т1, а потом уже накладывается джоин
в QueryAnalyzer, возможно, хороший парсер запросов, он приводит первый вариант к более оптимальному


Наверх

Титульная страница Поиск, карта сайта Написать письмо