Показать сообщение отдельно
Старый 17.09.2019, 09:47   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,651 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от AnGor Посмотреть сообщение
получается, что sp_cursoropen берёт очень не оптимальный план.
Оптимальный. Но для курсора. А для курсора принципиально важно быстро вынуть одну (первую) запись, а не весь список. Как следствие, и план запроса по другому строится. Просто "побочная" цель немного отличается

Как уже неоднократно упоминал, очень сильно исказить план выполнения может использование Exists в запросе. Если такая связка в запросе есть, то лучше ее заменить на Inner Join, если это возможно по логике запроса

Собственно, если Вы тестируете план выполнения напрямую в SQL Manager, то для запросов Axapta надо тестировать примерно такую конструкцию

X++:
declare MyCursor for select ... from ...
open MyCursor
fetch next from MyCursor
Это вернет только первую запись, но для анализа плана выполнения этого вполне достаточно, поскольку как раз на выборке первой записи курсора и "спотыкаемся"

В некоторых случаях может помочь обновление статистики. Но обновление статистики вещь "сиюминутная". Если эта вьюха будет выполняться относительно редко, то оптимальная для нее статистика будет "похоронена" под статистикой более часто выполняемых запросов
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Vadik (1), trud (3), Logger (3), AnGor (2).