Неверно поняты причины и следствия. Не факт, что причиной тормозов является высокая стоимость отдельного этапа. Все это есть по ссылкам и на видео, но если вкратце
1. Перед выполнением собственно запроса SQL строит план, по которому он будет его выполнять
2. При выполнении запроса SQL строго следует выбранному плану
Проблема в том, что план выполнения запроса может быть не оптимальным. Или выделено недостаточно места в TempDB под промежуточные результаты. Вот в этом случае запрос будет выполняться медленно. И совершенно не важно, будет ли при этом использоваться TempDB или нет.
В принципе, в синтаксисе T-SQL есть возможность явно указать, по какому плану надо выполнять ту или иную операцию. Но, во-первых, это крайне порочная практика для быстро меняющейся системы, а, во-вторых, синтаксис Axapta практически не дает возможностей по использованию хинтов для этих целей.
Как следствие, остаются только две возможности:
1. Модифицировать синтаксис самого запроса в Axapta. Возможно, разбить на вложенные запросы
2. Выполнять регулярное обслуживание базы данных вроде обновления статистики и индексов. Но тут нужен администратор базы данных
Кстати, TempDB у Вас будет использоваться вне зависимости от стоимости вставки в индекс. А за счет чего такая высокая стоимость - это надо смотреть разные дополнительные свойства. Какие именно - есть упоминание в видео-уроке
В данном случае, предположительно, проблема в том, что статистика в базе SQL давно не обновлялась. Т.е. план выполнения был выбран на основе устаревших данных. Это есть по ссылке на обсуждение прошлогодней темы на сайте SQL.ru. (первая ссылка)
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
|