关于#sqlserver#的问题:sqlserver 查询时间过长

sqlserver 查询时间过长,导致超时错误
如何解决sql优化查询
            SELECT
            t.SALES_INV_NUM,
            v.LHFID,
            SC.CUR_NAME,
            t.DOC_DATE,
            ROW_NUMBER() OVER (partition by t.SALES_INV_NUM order by t.SALES_INV_NUM DESC) AS LINE_NUM,
            t.OPR_ID,
            t.OPR_TIME,
            t.CUST_ID,
            t.CHK_ID,
            t.CHK_TIME,
            t.SOURCE_TYPE,
            t.PAY_WAY,
            t.BANK_NAME,
            t.TTL_ACC_VAL,
            t.TTL_REAL_VAL,
            t.TTL_UNACC_VAL,
            t.DOCUMENT_STATUS,
            t.TTL_RATE_VAL,
            t.Invoice_Status,        
            t.REMARK,T3.CUST_NAME,T3.CUST_NUM,T3.Sign,
            e.PROD_CLS_NUM,e.PROD_CLS_NAME,e.SPEC_NAME,e.TEXTURE_MATERIAL,e.ELECTROPLATE_COLOR,e.CLS_KHBM,e.COMPANY_NAME,d.SOURCE_NUM,d.TAX_RATE,E1.GRN_NUM AS ORD_GRN_NUM,D.PRICE,D.SALES_QTY,
            d.VAL,D.TAX_PRIC,D.CUST_PO_ID,D.SOURCE_DATE,
            d.RATE_VAL,
            d.ACC_VAL,
            D.UNIT_NAME,
            D.TAX_PRICE,
            D.TAX_TAX_VAL,
            d.UNACC_VAL,
            D.PROD_CLS_ID,
            d.REAL_VAL,
            d.REAL_QTY,
            d.DXID,
            d.StrF1,
            H.GRN_DATE,
            I.CPO,
            (D.VAL*isnull(t.CUR_RATE,1))AmountInLocalCurrency,(D.TAX_TAX_VAL*isnull(t.CUR_RATE,1))TaxCurrency,
            (D.RATE_VAL*isnull(t.CUR_RATE,1))AllCurrency ,D.ORIG_ORD_NUM,
            CASE WHEN ISNULL(OA.RECEIV_VAL,0) = 0 THEN 0 
        WHEN ISNULL(t.TTL_ACC_VAL,0)-ISNULL(OA.RECEIV_VAL,0) <= 0 THEN 2
        WHEN ISNULL(t.TTL_ACC_VAL,0)-ISNULL(OA.RECEIV_VAL,0) > 0 THEN 1 END RECEIV_PUSH
            FROM SALES_INVOICE t  LEFT JOIN (
                                        select Distinct D1.SALES_INV_NUM,D1.PROD_CLS_ID,D1.SOURCE_NUM ,D1.TAX_RATE,D1.DXID,D1.RE_DXID,D1.PRICE,D1.PRICE*(1+ISNULL(D1.TAX_RATE,0)/100)TAX_PRICE,SALES_QTY,D1.VAL,D1.VAL*ISNULL(D1.TAX_RATE,0)/100 TAX_TAX_VAL,D1.REAL_QTY,
                                        RATE_VAL,ACC_VAL,UNACC_VAL,REAL_VAL,D2.UNIT_NAME,D1.StrF1,AmountInLocalCurrency ,D1.ORIG_ORD_NUM,D1.SOURCE_DATE,D3.CUST_PO_ID,D1.TAX_PRICE TAX_PRIC
                                        from SALES_INVOICE_DTL D1
                                        LEFT JOIN SYS_UNIT D2 ON D1.UNIT_ID=D2.UNIT_ID 
                                        LEFT JOIN ORD_DTL D3 ON D1.RE_OLD_DXID = D3.DXID AND D1.PROD_CLS_ID=D3.PROD_CLS_ID) d ON t.SALES_INV_NUM=d.SALES_INV_NUM
              LEFT JOIN PROD_CLS e  ON d.PROD_CLS_ID=e.PROD_CLS_ID   LEFT JOIN SYS_CUST T3 ON  T.CUST_ID=T3.CUST_ID    LEFT JOIN SYS_CUR SC ON  SC.CUR_ID=T.CUR_ID    LEFT JOIN GRN_DTL D1 ON D.RE_DXID = D1.DXID    LEFT JOIN GRN_StockUp E1 ON D1.SOURCE_DOC_NUM = E1.GRN_NUM    LEFT JOIN LH_Voucher v ON t.VoucherID = v.LHFVoucherID    LEFT JOIN GRN H ON D1.GRN_NUM = H.GRN_NUM LEFT JOIN (SELECT SUM(isnull(REAL_VAL,0)) as RECEIV_VAL,o.SOURCE_NUM
                             from SALES_RECEIV H  
                             LEFT JOIN SALES_RECEIV_DTL O ON H.SALES_REC_NUM=O.SALES_REC_NUM 
                             group by o.SOURCE_NUM ) OA ON t.SALES_INV_NUM=OA.SOURCE_NUM   LEFT JOIN ORD I ON d.ORIG_ORD_NUM = I.ORD_NUM   
          WHERE 1=1  AND ( t.DOC_DATE >= '2022-12-03 00:00:00' AND t.DOC_DATE <= '2023-01-03 00:00:00' ) 

img

我的解决思路:增加limit分页限制

可以查看一下sql查询计划,它的性能卡在什么地方

查询慢,加索引