Оптимизация запроса

RAVEman

Есть запрос предназначен для пейджера (ms sql 2000): select t1.* from mls_listings t1,(select RowID from #tmp where __RowID between @rowStart and @rowEnd) t2 where t1.ListNum=t2.RowIDили например его аналог через inner joinselect t1.* from MLS_listings t1 inner join (select RowID from #tmp where __RowID between @rowStart and @rowEnd) t2 on t1.ListNum=t2.RowIDОба запроса работают за 4 секунды.Структура базы:1) MLS_listings - 10 000 записей2) в MLS_listings на поле ListNum стоит Праймери кей3) #tmp содержит 2 поля 1) RowID - праймери кей из таблицы MLS_listings 2) __RowID построен как аналог оракловскому RowNum4) разница между @rowStart and @rowEnd в тесте была - 10.Следующий аналог этому же запросу РАБОТАЕТ ЗА 0 СЕКУНД:CREATE TABLE #tmp2 ( RowID int)insert into #tmp2 (RowID) select RowID from #tmp where __RowID between @rowStart and @rowEndselect t1.* from mls_listings t1,#tmp2 t2 where t1.ListNum=t2.RowIDПОЖАЛУЙСТА, ОБЯСНИТЕ ПОЧЕМУ ТАК ПРОИЗОШЛО!!!
2 ответа

RAVEman

ПОЖАЛУЙСТА, ОБЯСНИТЕ ПОЧЕМУ ТАК ПРОИЗОШЛО!!!
планы выполнения сравнивали ?


RAVEman

select t1.* from mls_listings t1where exists(select 1 from #tmp where t1.ListNum=RowID and (__RowID between @rowStart and @rowEnd))