Согласен с Wamr - запросы получатся в принципе похожие.
Различие будет в порядке следования полей в предложении where и в расстановке скобок. И более того - перестановка таблиц в селекте тоже не будет иметь эффекта.
Думаю, что причина неиспользования индекса по таблице A в том, что запрос по таблице B возвращает множество записей. Причем, скорее всего, включены плейсхолдеры, в результате чего оптимизатор не может предсказать статистику для запроса по таблице B и по-этому идет по пессимистичному плану. А дальше - уже рашает, что сканирование по таблице A будет дешевле.
Как варианты:
1. Попробовать включить литералы (forceliterals) в запросе. Не уверен действенности этого совета. Все зависит от правильности статистики по таблицам и распределении значений.
2. Попробовать явно указывать индексные хинты для таблицы A. Опять-таки - все зависит от распределения значений по таблицам. В принципе - это в большой степени экспериментальный путь
3. Самый простой путь - разбить запрос на два. Внешний цикл - по таблице B. Внутри цикла - запрос по таблице A. При этом для внутреннего запроса явно указать forceplaceholders.
__________________
Axapta v.3.0 sp5 kr2
|