Для пример был взят следующий маленький подзапрос, задействованный в "большом" запросе:
select level,A_TYPE_COD, A_TYPE_NAME from bmssa.A_TYPE A
where DataAreaId ='tst' --внешний параметр
start with A_TYPE_MR_COD =0 --внешний параметр
connect by prior A_TYPE_COD=A_TYPE_MR_COD
Данный запрос будет выполняться только средствами Oracle.
MS SQL Server никогда не слышал о connect by prior.
Запрос запускался через класс Connection в MS Axapta.
На таблице стояли 2(3) индекса:
0. (DataAreaId)
1.A_TYPE_MR_COD (+DataAreaId)
2.A_TYPE_COD и A_TYPE_MR_COD (+DataAreaId)
Время выполнения запроса:
1. Без индекса DataAreaId - 0.016 сек (1 и 2 индекс без DataAreaID)
2. С индексом DataAreaId - 1.000 сек (0,1 и 2 индекс с DataAreaID)
Боюсь что оптимизировать в данном случае просто нечего.
|