31.07.2009, 12:21 | #1 |
Участник
|
Нужна помощь в оптимизации сложного запроса
Всем добрый день!
Столкнулся с проблемой оч медленного раскрытия лукапа. Да, запрос там сложный, но как ни старался, все равно медленно открывается, может кто подскажет как еще можно упростить.. Задача на всякий случай состояла отобрать счета-фактуры, имеющие открытые проводки. Запрос в мониторинге получился следующий: 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) |
|
Теги |
оптимизация |
|
Похожие темы | ||||
Тема | Ответов | |||
Срочно нужна помощь по платежам | 8 | |||
Нужна помощь. | 9 | |||
опять нужна помощь новичку | 18 | |||
Очень нужна Ваша помощь!!! | 2 | |||
Управление резервированием - нужна помощь! | 8 |
|