2016-05-26 8 views
-6

このクエリでは576レコードしか提供されていません。テーブルにはレコードが多すぎます。誰かがこのクエリを最適化して時間を短縮するのを助けてくれますか?あなたのクエリを改善するためのクエリが実行に1分掛かり、応答時間を短縮する必要があります

WITH tab1 AS 
     (SELECT lov.stored_value, 
       lov.displayed_value 
     FROM ms_qs_list_of_values_t lov, 
      ms_qs_lov_names nam 
     WHERE lov.lov_id=nam.lov_id 
     AND nam.lov_name='MS_QSM_Init_Questionnaire_Type'), 
     tab2 AS 
     (SELECT lov.stored_value, 
       lov.displayed_value 
     FROM ms_qs_list_of_values_t lov, 
      ms_qs_lov_names nam 
     WHERE lov.lov_id=nam.lov_id 
     AND nam.lov_name='MS_QSM_Frequency'), 
     tab3 AS 
     (SELECT lov.stored_value, 
       lov.displayed_value 
     FROM ms_qs_list_of_values_t lov, 
      ms_qs_lov_names nam 
     WHERE lov.lov_id=nam.lov_id 
     AND nam.lov_name='MS_SPI_REVENUE_RANGE_LOV') 
    SELECT QUE_REQUEST_ID, 
      QUESTIONNAIRE_ID, 
      QUE_REQUEST_NAME, 
      QUE_REQUEST_TYPE, 
      SCH_FREQUENCY, 
      DD_OBJECT_TYPE, 
      QUE_REQUEST_TYPE_DISP, 
      SCH_FREQUENCY_DISP, 
      LAST_SENT_DATE, 
      SCH_NEXT_DATE, 
      SENT, 
      PROGRESS, 
      COMPLETED, 
      OPEN_ISSUES, 
      ISSUES_PAST_DUE, 
      NAME_LINK, 
      QUE_NAME, 
      OWNER_ORGANIZATIONS_DISP, 
      OWNERS_DISP, 
      LOGIN_ID, 
      NULL_VALUE 
    FROM 
     (SELECT IQV.QUE_REQUEST_ID, 
       IQV.QUESTIONNAIRE_ID, 
       IQV.QUE_REQUEST_NAME, 
       IQV.QUE_REQUEST_TYPE, 
       IQV.SCH_FREQUENCY, 
       IQV.DD_OBJECT_TYPE, 
       tab1.displayed_value AS QUE_REQUEST_TYPE_DISP, 
       tab2.displayed_value AS sch_frequency_disp, 
       IQV.LAST_SENT_DATE, 
       IQV.SCH_NEXT_DATE, 
       IQV.SENT, 
       PROGRESS, 
       IQV.COMPLETED, 
       IQV.OPEN_ISSUES, 
       IQV.ISSUES_PAST_DUE, 
       ms_qsm_rpt_util.get_url(iqv.dd_object_type,iqv.dd_process_instance_id, iqv.que_request_name) AS name_link, 
       que_name, 
       owner_organizations_disp, 
       owners_disp, 
       :LOGIN_ID AS login_id, 
       tab3.displayed_value AS null_value 
     FROM MS_QSM_INIT_QUESTNR_RPT_V1 IQV, 
      ms_qsm_init_questnr_ind b, 
      ms_spi_supplier_sft d, 
      ms_spi_facility c, 
      tab1, 
      tab2, 
      tab3 
     WHERE iqv.que_request_id=b.que_request_id 
     AND b. indv_item_field_1=d.object_id 
     AND d.facility_code=c.facility_code 
     AND iqv.que_request_type=tab1.stored_value 
     AND iqv.sch_frequency=tab2.stored_value 
     AND c.SALES_ANNUAL_REV=tab3.stored_value 
     AND ((MS_APPS_SECURITY_PKG.CHECK_OBJECT_ACCESS(IQV.DD_OBJECT_TYPE, IQV.RESTRICT_ACCESS_TO, IQV.OWNER_ORGANIZATIONS,:LOGIN_ID,'VIEW') = 'ACCESS' 
       AND TRUNC(SYSDATE)<=TRUNC(NVL(IQV.SCH_END_BY,SYSDATE))) 
       OR (IQV.SCH_FREQUENCY='6' 
        AND IQV.DD_CREATED_BY=:LOGIN_ID))) 
+5

緊急に必要ですか?さて、あなたのテーブル/インデックス構造を理解するために私のクリスタルボールを手に入れましょう。 – Siyual

+1

パフォーマンスには役立ちませんが、明示的な 'join'構文を使用する必要があります。 – HoneyBadger

+1

あなたのスキーマについて何も知らずに、あなたの 'CTE 'を具体化することもできます。一時テーブル( '#')を作成すると、それらにインデックスを置くことができます。サブクエリは必要ありません。しかし、それはパフォーマンスを助けません、私は推測します。 – HoneyBadger

答えて

0

SELECT lov.stored_value, lov.displayed_value 
    FROM ms_qs_list_of_values_t lov, ms_qs_lov_names nam 
WHERE lov.lov_id=nam.lov_id 
    AND nam.lov_name='MS_QSM_Init_Questionnaire_Type' 

SELECT lov.stored_value, lov.displayed_value 
    FROM ms_qs_list_of_values_t lov 
    join ms_qs_lov_names nam on lov.lov_id=nam.lov_id 
where nam.lov_name='MS_QSM_Init_Questionnaire_Type' 

のチェックこれはあなたの実行時間を短縮である下のように参加し追加します。そうでない場合は、戻り値がより多くの時間を消費する関数(MS_APPS_SECURITY_PKG.CHECK_OBJECT_ACCESS、ms_qsm_rpt_util.get_url)である可能性があります。また、クエリのパフォーマンスを確認するための関数定義を指定してください。

関連する問題