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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.09.2018, 15:09   #1  
SCP_00 is offline
SCP_00
Участник
 
16 / 14 (1) ++
Регистрация: 24.04.2018
? А как бы его так?
Есть запрос
X++:
 select firstonly RecId from ledgerJournalTableC
                        index hint PostedJournalNumIdx
                        where ledgerJournalTableC.JournalType   == ledgerJournalTable.JournalType
                           && ledgerJournalTableC.Posted        == NoYes::Yes
                    join RecId from ledgerJournalTransC
                        where ledgerJournalTransC.JournalNum    == ledgerJournalTableC.JournalNum
                           && ledgerJournalTransC.AdvanceId     == ledgerJournalTrans.AdvanceId
                           && ledgerJournalTransC.RecId         != ledgerJournalTrans.RecId;
PostedJournalNumIdx - индекс по journalType, posted, и journalnum. И все бы хорошо, но запрос работает слишком долго, овер 5 мин на строку. Я переписал его для квери, стало чуть быстрей, но недостаточно. Как его еще ускорить ? Уже незнаю куда смотреть...
Старый 26.09.2018, 15:34   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,228 / 2421 (89) +++++++++
Регистрация: 16.01.2004
Адрес: Москва
1. План запроса.
2. Так как count(LJTrans) >> count(LJTable) возможно более селективным будет какой-то индекс по LJTrans (AdvanceID, RecID?) (сравните селективность условий по табличкам на конкретных данных - вероятно при большом объеме count(posted)>>count(!posted))
__________________
https://axcoder.github.io
За это сообщение автора поблагодарили: SCP_00 (1).
Старый 26.09.2018, 16:29   #3  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
440 / 231 (8) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от belugin Посмотреть сообщение
Так как count(LJTrans) >> count(LJTable) возможно более селективным будет какой-то индекс по LJTrans (AdvanceID, RecID?)
Тогда уж (AdvanceId, JournalNum, RecId). Если в результирующей выборке не нужно значение RecId по LedgerJournalTrans, то можно попробовать переделать на exists join. Если в LedgerJournalTrans штатный кластерный индекс по RecId, то достаточно (AdvanceId, JournalNum).
За это сообщение автора поблагодарили: SCP_00 (1), belugin (10).
Старый 26.09.2018, 17:45   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,228 / 2421 (89) +++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от Alexius Посмотреть сообщение
Тогда уж (AdvanceId, JournalNum, RecId). Если в результирующей выборке не нужно значение RecId по LedgerJournalTrans, то можно попробовать переделать на exists join. Если в LedgerJournalTrans штатный кластерный индекс по RecId, то достаточно (AdvanceId, JournalNum).
По поводу JournalNum согласен, по поводу RecID интересно. Если включить его (как included column) то результат будет независим от того, кластерный ли индекс по RecID или нет, или он как-то включит RecID два раза? Если нет, то может, стоит включить, чтобы гарантировать его нахождение там вне зависимости от кластерности RecID?

Journal num, наверное тоже надо как included column,?
__________________
https://axcoder.github.io
Старый 27.09.2018, 10:03   #5  
YoungPadawan is offline
YoungPadawan
Участник
 
13 / 20 (1) +++
Регистрация: 04.01.2017
Цитата:
Сообщение от belugin Посмотреть сообщение
По поводу JournalNum согласен, по поводу RecID интересно. Если включить его (как included column) то результат будет независим от того, кластерный ли индекс по RecID или нет, или он как-то включит RecID два раза? Если нет, то может, стоит включить, чтобы гарантировать его нахождение там вне зависимости от кластерности RecID?

Journal num, наверное тоже надо как included column,?
Вот тут человек пишет, что в не кластерный индекс для ссылки добавляются все поля кластерного индекса. А если какое-то поле уже присутствует, то оно повторно не добавляется.
За это сообщение автора поблагодарили: belugin (10).
Старый 27.09.2018, 14:34   #6  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
440 / 231 (8) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от belugin Посмотреть сообщение
Journal num, наверное тоже надо как included column,?
Теоретически, отсортированный JournalNum может привести к ускорению с помощью Merge Join, но лучше посмотреть план.
Цитата:
Сообщение от belugin Посмотреть сообщение
Если нет, то может, стоит включить, чтобы гарантировать его нахождение там вне зависимости от кластерности RecID?
Можно, только у автора топика похоже АХ 2009, где их нет: AX 2009. Преобразование числа в текст
Теги
ax2009, запросы, оптимизация

 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:23.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.