AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
CRM
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Prev Previous Post   Next Post Next
Old 31.07.2009, 12:21   #1  
Kashesh is offline
Kashesh
Участник
 
29 / 10 (1) +
Join Date: 08.12.2004
Location: Саров
Нужна помощь в оптимизации сложного запроса
Всем добрый день!
Столкнулся с проблемой оч медленного раскрытия лукапа. Да, запрос там сложный, но как ни старался, все равно медленно открывается, может кто подскажет как еще можно упростить..
Задача на всякий случай состояла отобрать счета-фактуры, имеющие открытые проводки.
Запрос в мониторинге получился следующий:
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)
Может надо указывать в запросе только поля, которые находятся в лукапе, по мне кажется в таблицах не так много полей, чтобы этим выигрывать время..
Tags
оптимизация

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Срочно нужна помощь по платежам 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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 17:31.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.