具有多个过滤器的Oracle SQL查询优化并创建表

时间:2019-05-27 07:44:12

标签: sql oracle optimization

我的选择查询已运行15个小时,但仍在运行,因此我取消了它。如何优化查询?

CREATE TABLE W_PURCH_RCPT_FS_tmp
AS

    SELECT RCV.TRANSACTION_ID,
           PO.RELEASE_DATE,
           NVL (ASL.PROCESSING_LEAD_TIME, MTL.FULL_LEAD_TIME)
               AS PROCESSING_LEAD_TIME
      FROM obia_ui.PO_ASL_ATTRIBUTES@betsy.world@dsn_310      ASL,
           obia_ui.MTL_SYSTEM_ITEMS_B@betsy.world@dsn_310      MTL,
           obia_ui.RCV_TRANSACTIONS@betsy.world@dsn_310       RCV,
           obia_ui.PO_RELEASES_ALL@betsy.world@dsn_310         PO,
           obia_ui.PO_LINES_ALL@betsy.world@dsn_310           LINES,
           obia_ui.PO_LINE_LOCATIONS_ALL@betsy.world@dsn_310   LOC,
           obia_ui.PO_HEADERS_ALL@betsy.world@dsn_310          HEAD
     WHERE  RCV.CREATION_DATE > '30-JUN-2016'
            AND MTL.INVENTORY_ITEM_ID = LINES.ITEM_ID
           AND MTL.ORGANIZATION_ID = LOC.SHIP_TO_ORGANIZATION_ID
           AND LINES.PO_LINE_ID = LOC.PO_LINE_ID
           AND ASL.USING_ORGANIZATION_ID = LOC.SHIP_TO_ORGANIZATION_ID
           AND ASL.ITEM_ID = LINES.ITEM_ID
           AND ASL.VENDOR_ID = HEAD.VENDOR_ID
           AND ASL.VENDOR_SITE_ID = HEAD.VENDOR_SITE_ID
           AND RCV.TRANSACTION_ID = PO.PO_RELEASE_ID
           ;

我希望查询结束时间短些。

1 个答案:

答案 0 :(得分:0)

首先,您必须掌握解释计划的概念以优化Oracle中的查询。了解了解释计划后,我建议您逐桌进行。从第一个表开始,检查它在解释计划中的执行情况。这样,您可以找出需要创建的索引。有时无法创建有用的索引。在这种情况下,将数据分成较小的块(表)可能会有所帮助。 Oracle还具有并行查询运行功能。您也可以利用此功能。