Планы выполнения запросов
Код:
SELECT A.ITEMID,A.SALESQTY,A.LINEAMOUNT,A.SALESID,A.RECID
FROM SALESLINE A
WHERE ((A.DATAAREAID='цтр')
AND (A.SALESQTY<>0))
AND EXISTS (SELECT 'x' FROM WMSBILLOFLADINGORDER B
WHERE ((B.DATAAREAID='цтр')
AND ((B.INVENTTRANSREFID=A.SALESID)
AND (B.BILLOFLADINGID='101'))))
SELECT A.ITEMID,A.SALESQTY,A.LINEAMOUNT,A.SALESID,A.RECID
FROM SALESLINE A,WMSBILLOFLADINGORDER B
WHERE ((A.DATAAREAID='цтр')
AND (A.SALESQTY<>0))
AND ((B.DATAAREAID='цтр')
AND ((B.INVENTTRANSREFID=A.SALESID)
AND (B.BILLOFLADINGID='101')))
То же самое, но "обернутое" в курсоры
Лично мне кажется, что использования хинтов - это порочная практика. Как правило, даже если удается оптимизировать запрос, то с течением времени, с изменением объема таблицы и статистики ее использования, хинты начинают не ускорять, а замедлять работу запроса.
Поэтому, лучше оставить построение плана "на усмотрение" автоматического построителя запросов, чтобы потом не вычищать собственноручно сделанные модификации...
Вставка во временную таблицу при работе курсоров - это настолько незначительная задержка, что не стоит обращать на нее внимание. Посмотри прилагаемые планы исполнения. При работе через Exists вставка в курсор стоит 0%, а при раьоте через Inner - 35%. Тем не менее, общая стоимость запроса с Exists составляет 100% по сравнению с 0% стоиомости запроса с Inner.