AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.12.2006, 10:43   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
2 fed
Думаю, что ваше замечание относится к запросу такого вида
X++:
select a
exists join b where a.parm1 == parm1 && a.filed1 == b.field1
Если посмотреть на запрос, отправляемый на сервет, то увидим вот что
X++:
select *
from a
where exists(select 'x' from b where a.parm1 = parm1 and a.field1 = b.field1)
(Я опустил фильтр по компании (dataAreaId). В данном случае это не существенно)
Т.е. при таком запросе условие a.parm1 == parm1 накладывается не на таблицу A, а на связь таблицы A и таблицы B. Будут выбраны все записи для таблицы A и для каждой из них будет вызван внутренний селект. С точки зрения логики запросы будет идентичны - в обоих случаях получаем идентичный набор записей
Кстати, замечание Raven Melancholic - как раз для такого типа запросов.
Это же относится и к notexists join запросам.

Для простого join'а будет генерировать такой запрос
X++:
select *
from a, b
where (a.dataareaid = 'EXT') and ((b.adataareaid = 'EXT') and ((a.parm1=parm1) and (a.field1=b.field1)))
Оптимизатор что MS SQL, что Oracle нормально обрабатывает такие запросы.
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Logger (2).
Старый 05.12.2006, 12:44   #2  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
to andyD.
Посмотрел. Действительно в последних sp генерируется правильный джойн. А вот года два с лишним назад (тогда кажется sp1 был) для такого запроса генерировалось что-то типа
select *
from a inner join b on a.dataAreaid=b.dataareaid inner join c.dataareaid=a.dataAreaId
where a.field1=b.field2 и т.п.
И от таких запросов оптимизатор регулярно уводило в картезианское произведение таблиц.
Или там даже в явном виде генерировалось ядром аксапты слово cross join...
Не помню уже если честно
Но в общем - переделка таких запросов реально на порядок ускоряло работу.
Теги
производительность, запрос (query), axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
В чем разница между salesline.QtyOrdered и SalesQty? Jab Straight DAX: Функционал 5 19.06.2007 17:04
Разница между пустой Группой на форме, и группой в которую включён элемент 3oppo DAX: Программирование 8 26.12.2006 10:47
Разница между английской и русской документацией Sirius DAX: Функционал 4 22.06.2005 15:02
Расчеты между компаниями Yuri Nikitenko DAX: Функционал 9 15.11.2004 08:49

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:23.