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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.07.2009, 12:21   #1  
Kashesh is offline
Kashesh
Участник
 
29 / 10 (1) +
Регистрация: 08.12.2004
Адрес: Саров
Нужна помощь в оптимизации сложного запроса
Всем добрый день!
Столкнулся с проблемой оч медленного раскрытия лукапа. Да, запрос там сложный, но как ни старался, все равно медленно открывается, может кто подскажет как еще можно упростить..
Задача на всякий случай состояла отобрать счета-фактуры, имеющие открытые проводки.
Запрос в мониторинге получился следующий:
X++:
SELECT A.FACTUREID,A.FACTUREDATE,A.FACTUREAMOUNT,A.FACTURETAX,A.CURRENCYCODE,A.CUSTVENDINVOICEACCOUNT,A.FACTUREEXTERNALID,A.NUMBERSEQUENCEGROUPID,A.NONREALREVENUE,A.OFFSESSIONID,A.CONSIGNEE,A.FACTUREROUNDOFF,A.CONSIGNOR,A.PRINTINMST,A.MODULE,A.FACTURETYPE,A.DOCUMENTNUM,A.DOCUMENTDATE,A.REVERSED,A.VOUCHER,A.CUSTVENDTRANSRECID,A.POSTINGLOGRECID,A.LANGUAGEID,A.DELIVERYADDRESS,A.FACTUREDATE_EXTERNAL,A.REVERSEDATE,A.KDV_STORNOFACTUREEID,A.KDV_STORNO,A.KDV_PRINTFACTUREEID,A.KDV_PRINTFACTUREEIDEDIT,A.KDV_PRINTFACTUREID,A.KDV_STORNOINVOICEID,A.KDV_STORNORECID,A.KDV_OLDPRINTFORM,A.MODIFIEDDATE,A.MODIFIEDTIME,A.RECVERSION,A.RECID
FROM FACTUREJOUR_RU A WITH( NOLOCK)
WHERE ((A.DATAAREAID='SLK') AND (((A.MODULE=0) AND (A.CUSTVENDINVOICEACCOUNT='Ю-РЕЧТРАНС')) AND (A.FACTUREID>='СФВК-051145'))) 

AND EXISTS (SELECT 'X'
FROM FACTURETRANS_RU B WITH( NOLOCK)
WHERE ((B.DATAAREAID='SLK') AND ((A.FACTUREID=B.FACTUREID) AND (A.MODULE=B.MODULE)))

AND EXISTS (SELECT 'X'
FROM CUSTINVOICETRANS C WITH( NOLOCK)
WHERE ((C.DATAAREAID='SLK') AND (((((((B.MODULE=0) AND (B.FACTURELINETYPE=0)) AND (B.INVOICELINENUM=C.LINENUM)) AND (B.INVOICEDATE=C.INVOICEDATE)) AND (B.INVOICEID=C.INVOICEID)) AND (B.SALESPURCHID=C.SALESID)) AND (B.NUMBERSEQUENCEGROUP=C.NUMBERSEQUENCEGROUP)))

AND EXISTS (SELECT 'X'
FROM CUSTINVOICEJOUR D WITH( NOLOCK)
WHERE ((D.DATAAREAID='SLK') AND ((((C.SALESID=D.SALESID) AND (C.INVOICEID=D.INVOICEID)) AND (C.INVOICEDATE=D.INVOICEDATE)) AND (C.NUMBERSEQUENCEGROUP=D.NUMBERSEQUENCEGROUP))) 

AND EXISTS (SELECT 'X'
FROM CUSTTRANS E WITH( NOLOCK)
WHERE ((E.DATAAREAID='SLK') AND (((D.INVOICEID=E.INVOICE) AND (D.INVOICEACCOUNT=E.ACCOUNTNUM)) AND (D.INVOICEDATE=E.TRANSDATE)))

AND EXISTS (SELECT 'X'
FROM CUSTTRANSOPEN F WITH( NOLOCK)
WHERE ((F.DATAAREAID='SLK') AND ((E.ACCOUNTNUM=F.ACCOUNTNUM) AND (E.RECID=F.REFRECID))))))))
ORDER BY A.FACTUREID,A.MODULE OPTION(FAST 1)
Может надо указывать в запросе только поля, которые находятся в лукапе, по мне кажется в таблицах не так много полей, чтобы этим выигрывать время..
Теги
оптимизация

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Срочно нужна помощь по платежам Blondinka_N DAX: Функционал 8 06.08.2008 14:10
Нужна помощь. Alex_B DAX: Программирование 9 19.07.2006 18:01
опять нужна помощь новичку Sada DAX: Функционал 18 01.04.2005 12:42
Очень нужна Ваша помощь!!! Vasilenko Alexsandr DAX: Прочие вопросы 2 05.11.2003 11:51
Управление резервированием - нужна помощь! Pavlo AKA Panok DAX: Программирование 8 25.03.2003 14:23

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

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

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