优化此查询的基本方法是什么?

时间:2018-02-21 17:25:37

标签: oracle optimization

标题几乎说明了一切。我写了这个大而丑陋的查询,但是它运行起来需要永远。我对优化SQL没有任何经验,对语言及其功能也很陌生。我意识到你们中没有人会熟悉我在工作的环境,但我只是想知道是否有任何基本的东西对你有所了解。谢谢!

SELECT MAX(INVOICE.invoice_id) invoice_id, MAX(invoice.vendor_num) vendor_num, max(invoice.vendor_name) vendor_name,
MAX(invoice.po_number) po_number, MAX(invoice.invoice_date) invoice_date, MAX(invoice.invoice_num) invoice_num,
MAX(invoice.terms_name) terms_name, MAX(invoice.invoice_amount) invoice_amount, MAX(invoice.amount_applicable_to_discount) amount_applicable_to_discount,
MAX(invoice.amount_paid) amount_paid, MAX(invoice.payment_date) payment_date, MAX(invoice.document_id) document_id, 
MAX(invoice.filename) filename,
STAMPS.page_markups_view_id, STAMPS.TEXT, STAMPS.TOOL_NAME 
FROM 
(SELECT DISTINCT    inv.invoice_id, 
                    vendor.segment1 vendor_num, 
                    vendor.vendor_name, 
                    MAX(poh.segment1) po_number, 
                    inv.invoice_date, 
                    inv.invoice_num, 
                    terms.name terms_name, 
                    inv.invoice_amount, 
                    inv.amount_applicable_to_discount, 
                    inv.amount_paid, 
                    pmt.check_date payment_date,
                    path.document_id, 
                    vendor.segment1 || '-' || inv.invoice_num || '.pdf' filename
    FROM            apps.ap_invoices_all inv, 
                    apps.ap_invoice_distributions_all dist, 
                    apps.po_distributions_all podi, 
                    apps.ap_invoice_payment_history_v pmt, 
                    apps.fnd_attached_docs_form_vl fnd, 
                    markview.mv_page_image_paths path, 
                    apps.po_vendors vendor, 
                    apps.po_headers_all poh, 
                    apps.ap_terms terms 
    WHERE           inv.invoice_id = to_number(fnd.pk1_value) 
    AND             inv.invoice_id = dist.invoice_id 
    AND             poh.po_header_id(+) = podi.po_header_id 
    AND             podi.po_distribution_id(+) = dist.po_distribution_id 
    AND             fnd.file_name = to_char(path.document_id) 
    AND             inv.invoice_id = pmt.invoice_id 
    AND             fnd.category_description = 'MarkView Document' 
    AND             fnd.entity_name = 'AP_INVOICES' 
    AND             inv.vendor_id = poh.vendor_id(+) 
    AND             inv.terms_id = terms.term_id 
    AND             inv.vendor_id = vendor.vendor_id 
    AND             path.platform_name = 'UNIX_FS_TO_DOC_SERVER' 
    AND             pmt.void = 'N'
    and             inv.invoice_id = 1908784
    GROUP BY
    inv.invoice_id, 
    vendor.segment1 , 
    vendor.vendor_name, 
    inv.invoice_date, 
    inv.invoice_num, 
    terms.name , 
    inv.invoice_amount, 
    inv.amount_applicable_to_discount, 
    inv.amount_paid,
    path.document_id, 
    pmt.check_date, 
    vendor.segment1 || '-' || inv.invoice_num || '.pdf'
    ) INVOICE,
    (      SELECT mp.document_id, 
                  moi.markup_object_id, 
                  moi.page_markups_view_id, 
                  moi.text, 
                  mvt.tool_name, 
                  mp.page_id 
           FROM   markview.mv_markup_object moi, 
                  markview.mv_tool mvt, 
                  markview.mv_page_markups_view mpmv, 
                  markview.mv_page mp 
           WHERE  moi.tool_id = mvt.tool_id 
           AND    mp.page_id = mpmv.page_id 
           AND    mpmv.page_markups_view_id = moi.page_markups_view_id 
           AND    mvt.tool_id IN 
                  ( 
                         SELECT mvt.tool_id 
                         FROM   markview.mv_tool 
                         WHERE  mvt.tool_name IN ( 'Green Text', 
                                                  'Blue Sticky Note' ) )) STAMPS
WHERE invoice.document_id = stamps.document_id(+)
GROUP BY 
page_markups_view_id, TEXT, TOOL_NAME
)

0 个答案:

没有答案