Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql e通过查看解释计划了解表格大小@梅拉杜尔。“行”列表示预期的数据量。如果我没有错,但这些行是每个操作返回的行!我尝试了您提供的所有备选方案,但没有一个有帮助:(所有这些都会产生相同的成本,但是intersect选项会增加成本。我想我需要在sub-svc\u_Sql_Oracle_Plsql_Sqlperformance - Fatal编程技术网

Sql e通过查看解释计划了解表格大小@梅拉杜尔。“行”列表示预期的数据量。如果我没有错,但这些行是每个操作返回的行!我尝试了您提供的所有备选方案,但没有一个有帮助:(所有这些都会产生相同的成本,但是intersect选项会增加成本。我想我需要在sub-svc\u

Sql e通过查看解释计划了解表格大小@梅拉杜尔。“行”列表示预期的数据量。如果我没有错,但这些行是每个操作返回的行!我尝试了您提供的所有备选方案,但没有一个有帮助:(所有这些都会产生相同的成本,但是intersect选项会增加成本。我想我需要在sub-svc\u,sql,oracle,plsql,sqlperformance,Sql,Oracle,Plsql,Sqlperformance,e通过查看解释计划了解表格大小@梅拉杜尔。“行”列表示预期的数据量。如果我没有错,但这些行是每个操作返回的行!我尝试了您提供的所有备选方案,但没有一个有帮助:(所有这些都会产生相同的成本,但是intersect选项会增加成本。我想我需要在sub-svc\u status\u id列上建立一个索引,并删除where子句中的函数调用!!好的,如前所述,优化器应该生成相同的计划,所以我并不奇怪它没有帮助。这只是一个很小的机会,没有更多。但是你有什么建议吗添加这两个索引?这很可能会加快查询速度。是的,我


e通过查看解释计划了解表格大小@梅拉杜尔。“行”列表示预期的数据量。如果我没有错,但这些行是每个操作返回的行!我尝试了您提供的所有备选方案,但没有一个有帮助:(所有这些都会产生相同的成本,但是intersect选项会增加成本。我想我需要在sub-svc\u status\u id列上建立一个索引,并删除where子句中的函数调用!!好的,如前所述,优化器应该生成相同的计划,所以我并不奇怪它没有帮助。这只是一个很小的机会,没有更多。但是你有什么建议吗添加这两个索引?这很可能会加快查询速度。是的,我也在考虑同样的问题,因为这是一个现场域,解释计划是相同的,即使我使用简单SQL查询更改了函数,对于您提供的所有备选方案也是一样的!\n另外,我想知道我是否需要为这两个列或列添加索引如果我只为sub_svc_status_id添加sub_svc_id,可以吗?因为sub_svc_id已经是sub_svc_statis_id列上的主_keyI added列,它将成本降低到505K:)它用在游标中。你能解释一下吗:当你在游标中运行你提供的查询时,它需要那么长时间吗?我正在更新查询并添加使用该查询的过程。你能澄清一下:是该过程还是需要4-5个小时的查询吗?如果是该过程,那么查询需要多长时间?我正在执行该查询并它从最后1.30小时开始运行:(在创建列上的新索引后,检查问题以获得更新的解释计划创建索引后,首先你必须知道这4-5个小时的确切时间。
explain plan for SELECT /*+ PARALLEL_INDEX(ssp, sub_svc_parm_ix2, 4) 
                          INDEX(ssp sub_svc_parm_ix2) */ 
             SUB_SVC_ID
        FROM SUB_SVC_PARM ssp
       WHERE PARM_ID = GET_PARM_ID('net_ppv_credit_limit', GET_CLASS_ID('SubSvcSpec'), GET_SVCID('smp_cpe_cas'))
         AND VAL <> '140.00'
         AND EXISTS (SELECT /*+ PARALLEL_INDEX(ss, sub_svc_pk, 4) */ 
                            1
                       FROM SUB_SVC ss
                      WHERE ss.SUB_SVC_ID = ssp.SUB_SVC_ID
                        AND ss.SUB_SVC_STATUS_ID NOT IN (FN_GET_STATUS_ID('SubSvcSpec', 'deleted'),
                                                         FN_GET_STATUS_ID('SubSvcSpec', 'inactive'),
                                                         FN_GET_STATUS_ID('SubSvcSpec', 'add_in_progress'),
                                                         FN_GET_STATUS_ID('SubSvcSpec', 'activation_in_progress'),
                                                         FN_GET_STATUS_ID('SubSvcSpec', 'courtesy_block_in_progress'),
                                                         FN_GET_STATUS_ID('SubSvcSpec', 'mso_block_in_progress'),
                                                         FN_GET_STATUS_ID('SubSvcSpec', 'delete_in_progress'),
                                                         FN_GET_STATUS_ID('SubSvcSpec', 'deactivation_in_progress'),
                                                         FN_GET_STATUS_ID('SubSvcSpec', 'change_in_progress')));
Plan hash value: 4290343623

----------------------------------------------------------------------------           -----------------------------           
  | Id  | Operation                    | Name             | Rows  | Bytes      |TempSpc| Cost (%CPU)| Time     |
 ---------------------------------------------------------------------------   ------------------------------
 |   0 | SELECT STATEMENT             |                  |  1802K|    56M|       |   528K  (1)|730:11:02 |
 |*  1 |  HASH JOIN RIGHT SEMI        |                  |  1802K|    56M|    37M|   528K  (1)|730:11:02 |
 |*  2 |   TABLE ACCESS FULL          | SUB_SVC          |  1763K|    16M|       |   311K  (1)|430:15:33 |
 |   3 |   TABLE ACCESS BY INDEX ROWID| SUB_SVC_PARM     |  2394K|    52M|       |   209K  (0)|288:56:00 |
 |*  4 |    INDEX RANGE SCAN          | SUB_SVC_PARM_IX2 |  2394K|       |       |  1519   (0)| 02:05:59 |
---------------------------------------------------------------------------------------------------------

 Predicate Information (identified by operation id):
---------------------------------------------------

 1 - access("SS"."SUB_SVC_ID"="SSP"."SUB_SVC_ID")
 2 - filter("SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','deleted') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','inactive') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','add_in_progress') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','activation_in_progress') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','courtesy_block_in_progress') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','mso_block_in_progress') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','delete_in_progress') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','deactivation_in_progress') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','change_in_progress'))
4 - access("PARM_ID"="GET_PARM_ID"('net_ppv_credit_limit',"GET_CLASS_ID"('SubSvcSpec'),"GET_SV
          CID"('smp_cpe_cas')))
   filter("VAL"<>'140.00')
index_name      coulmn_name
-----------     ------------
SUB_SVC_PK      sub_svc_id
SUB_SVC_IX4     PARENT_SUB_SVC_ID
SUB_SVC_IX5     EXTERNAL_KEY
SUB_SVC_IX6     SUB_SVC_IX6
index_name        coulmn_name
-----------       ------------
SUB_SVC_PARM_PK   SUB_SVC_ID, PARM_ID
SUB_SVC_PARM_IX2  PARM_ID, VAL
 CREATE TABLE "SMPHOMCM"."SUB_SVC_PARM" 
   (    "SUB_SVC_ID" NUMBER(12,0) NOT NULL ENABLE, 
"PARM_ID" NUMBER(12,0) NOT NULL ENABLE, 
"VAL" VARCHAR2(2000 BYTE) NOT NULL ENABLE, 
 CONSTRAINT "SUB_SVC_PARM_PK" PRIMARY KEY ("SUB_SVC_ID", "PARM_ID")
  USING INDEX)

CREATE TABLE SYNTAX FOR SUB_SVC TABLE

CREATE TABLE "SMPHOMCM"."SUB_SVC" 
   (    "SUB_SVC_ID" NUMBER(12,0) NOT NULL ENABLE, 
"SUB_ID" NUMBER(12,0) NOT NULL ENABLE, 
"START_DT" DATE NOT NULL ENABLE, 
"EXTERNAL_KEY" VARCHAR2(100 BYTE) NOT NULL ENABLE, 
"SAMP_VER" NUMBER(9,0) NOT NULL ENABLE, 
"SUB_SVC_STATUS_ID" NUMBER(12,0) NOT NULL ENABLE, 
"CREATED_DTM" DATE NOT NULL ENABLE, 
"CREATED_BY" VARCHAR2(30 BYTE) NOT NULL ENABLE, 
"END_DT" DATE, 
"PURCHASE_DT" DATE, 
"PARENT_SUB_SVC_ID" NUMBER(12,0), 
"PRE_STATUS_ID" NUMBER(12,0), 
"MODIFIED_DTM" DATE, 
"MODIFIED_BY" VARCHAR2(30 BYTE), 
"SVC_ID" NUMBER(12,0), 
 CONSTRAINT "SUB_SVC_PK" PRIMARY KEY ("SUB_SVC_ID")
 USING INDEX)
 CREATE OR REPLACE PROCEDURE PPV_CREDIT_LIMIT(p_exid NUMBER)
 IS
 -- Flag 'N' is null

   TYPE tab_sub_svc_id               IS TABLE OF    SUB_SVC_PARM.SUB_SVC_ID%TYPE INDEX BY PLS_INTEGER;
   rs_sub_svc_id                     tab_sub_svc_id;

   c_class_SubSvcSpec                constant pls_integer := GET_CLASS_ID('SubSvcSpec');
   c_svc_smp_cpe_cas                 constant pls_integer := GET_SVCID('smp_cpe_cas');
   c_parm_net_ppv_credit_limit       constant pls_integer := GET_PARM_ID('net_ppv_credit_limit', c_class_SubSvcSpec, c_svc_smp_cpe_cas);
   c_deleted                         constant pls_integer := FN_GET_STATUS_ID('SubSvcSpec', 'deleted');
   c_inactive                        constant pls_integer := FN_GET_STATUS_ID('SubSvcSpec', 'inactive');
   c_add_in_progress                 constant pls_integer := FN_GET_STATUS_ID('SubSvcSpec', 'add_in_progress');
   c_activation_in_progress          constant pls_integer := FN_GET_STATUS_ID('SubSvcSpec', 'activation_in_progress');
   c_courtesy_block_in_progress      constant pls_integer := FN_GET_STATUS_ID('SubSvcSpec', 'courtesy_block_in_progress');
   c_mso_block_in_progress           constant pls_integer := FN_GET_STATUS_ID('SubSvcSpec', 'mso_block_in_progress');
   c_delete_in_progress              constant pls_integer := FN_GET_STATUS_ID('SubSvcSpec', 'delete_in_progress');
   c_deactivation_in_progress        constant pls_integer := FN_GET_STATUS_ID('SubSvcSpec', 'deactivation_in_progress');
   c_change_in_progress              constant pls_integer := FN_GET_STATUS_ID('SubSvcSpec', 'change_in_progress');
   c_ppv_credit_limit                constant varchar2(6) := '140.00';
   -- Added for net_creditthreshold parm
   c_parm_ppv_credit_threshold       constant pls_integer :=   GET_PARM_ID('net_ppv_creditthreshold', c_class_SubSvcSpec, c_svc_smp_cpe_cas);
   c_ppv_credit_threshold            constant varchar2(6) := '80.00';
   ilimit                            CONSTANT PLS_INTEGER := 1000;
   iCheck                            CONSTANT PLS_INTEGER := 10;
   l_total_recs                               PLS_INTEGER;
   l_rec_cnt                                  PLS_INTEGER;
   l_curr_cnt                                 PLS_INTEGER := 0;
   l_batch                                    PLS_INTEGER := 0;
   v_stop_flag                                CHAR(1) := 'N';

   cursor curPPV_CL IS
      SELECT /*+ PARALLEL_INDEX(ssp, sub_svc_parm_ix2, 4) 
                          INDEX(ssp sub_svc_parm_ix2) */ 
             SUB_SVC_ID
        FROM SUB_SVC_PARM ssp
       WHERE PARM_ID = c_parm_net_ppv_credit_limit
         AND VAL <> '140.00'
         AND EXISTS (SELECT /*+ PARALLEL_INDEX(ss, sub_svc_pk, 4) */ 
                            1
                       FROM SUB_SVC ss
                      WHERE ss.SUB_SVC_ID = ssp.SUB_SVC_ID
                        AND ss.SUB_SVC_STATUS_ID NOT IN (c_deleted,
                                                         c_inactive,
                                                         c_add_in_progress,
                                                         c_activation_in_progress,
                                                         c_courtesy_block_in_progress,
                                                         c_mso_block_in_progress,
                                                         c_delete_in_progress,
                                                         c_deactivation_in_progress,
                                                         c_change_in_progress));

BEGIN

   DBMS_APPLICATION_INFO.set_action (NULL);
   DBMS_APPLICATION_INFO.set_module (NULL, NULL);
   DBMS_APPLICATION_INFO.set_client_info (NULL);

   DBMS_APPLICATION_INFO.set_module (module_name => 'Procedure: PPV_CREDIT_LIMIT',
                                 action_name => 'Counting total updatable records');

   SELECT /*+ PARALLEL_INDEX(ssp, sub_svc_parm_ix2, 4) 
                   INDEX(ssp sub_svc_parm_ix2) */ 
      COUNT(SUB_SVC_ID)
 INTO l_total_recs
 FROM SUB_SVC_PARM ssp
WHERE PARM_ID = c_parm_net_ppv_credit_limit
  AND VAL <> '140.00'
  AND EXISTS (SELECT /*+ PARALLEL_INDEX(ss, sub_svc_pk, 4) */ 
                     1
                FROM SUB_SVC ss
               WHERE ss.SUB_SVC_ID = ssp.SUB_SVC_ID
                 AND ss.SUB_SVC_STATUS_ID NOT IN (c_deleted,
                                                  c_inactive,
                                                  c_add_in_progress,
                                                  c_activation_in_progress,
                                                  c_courtesy_block_in_progress,
                                                  c_mso_block_in_progress,
                                                  c_delete_in_progress,
                                                  c_deactivation_in_progress,
                                                  c_change_in_progress));

   DBMS_OUTPUT.PUT_LINE('Total records for updating are : ' || l_total_recs);

   OPEN curPPV_CL;

   LOOP
       FETCH curPPV_CL
        BULK COLLECT INTO rs_sub_svc_id limit ilimit;

       l_rec_cnt := rs_sub_svc_id.COUNT;
       l_curr_cnt := l_curr_cnt + l_rec_cnt;

       DBMS_APPLICATION_INFO.set_module (module_name => 'Procedure: PPV_CREDIT_LIMIT',
                                     action_name => 'Updating ' ||    l_curr_cnt || ' of ' || l_total_recs);

       for idx in 1 .. l_rec_cnt
        LOOP 
          UPDATE SUB_SVC_PARM
         SET VAL = c_ppv_credit_limit
       WHERE SUB_SVC_ID = rs_sub_svc_id(idx)
         AND PARM_ID = c_parm_net_ppv_credit_limit;

      UPDATE SUB_SVC_PARM
         SET VAL = c_ppv_credit_threshold
       WHERE SUB_SVC_ID = rs_sub_svc_id(idx)
         AND PARM_ID = c_parm_ppv_credit_threshold;

    END LOOP;
    COMMIT;


   l_batch := l_batch + 1;
   DBMS_APPLICATION_INFO.set_client_info ('BATCH:' || l_batch * ilimit);
   EXIT WHEN l_rec_cnt < ilimit;

   IF   MOD(l_batch, iCheck) = 0
   THEN
        SELECT STOP_FLAG
          INTO v_stop_flag
          FROM DM_PPV_CREDIT_LIMIT
         WHERE EXECUTION_ID = p_exid;
   END IF;

   EXIT WHEN v_stop_flag = 'Y';

   END LOOP;

   CLOSE curPPV_CL;

DBMS_OUTPUT.PUT_LINE('Have updated records : ' || l_curr_cnt || ' out of total records : ' || l_total_recs  );

EXCEPTION
    WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END PPV_CREDIT_LIMIT;
create index sub_svc_parm_ixpvs on sub_svc_parm (parm_id, val, sub_svc_id) ;

create index sub_svc_ixss on sub_svc (sub_svc_id, sub_svc_status_id) TABLESPACE "SMP_IDX_SUB_SVC" ;


Plan hash value: 176576580

----------------------------------------------------------------------------       --------------------
| Id  | Operation         | Name               | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
----------------------------------------------------------------------------    --------------------
|   0 | SELECT STATEMENT  |                    |  1802K|    56M|       | 43296   (1)| 59:49:34 |
|*  1 |  HASH JOIN        |                    |  1802K|    56M|    37M| 43296   (1)| 59:49:34 |
|*  2 |   INDEX FULL SCAN | SUB_SVC_IXSS       |  1763K|    16M|       | 33679   (1)| 46:32:15 |
|*  3 |   INDEX RANGE SCAN| SUB_SVC_PARM_IXPVS |  2308K|    50M|       |  1857   (0)| 02:34:00 |
------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("SS"."SUB_SVC_ID"="SSP"."SUB_SVC_ID")
   2 - filter("SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','deleted') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','inactive') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','add_in_progress') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','activation_in_progress') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','courtesy_block_in_progress') 
          AND "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','mso_block_in_progress') 
          AND "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','delete_in_progress') AND 
          "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','deactivation_in_progress') 
          AND "SS"."SUB_SVC_STATUS_ID"<>"FN_GET_STATUS_ID"('SubSvcSpec','change_in_progress'))
   3 - access("SSP"."PARM_ID"="GET_PARM_ID"('net_ppv_credit_limit',"GET_CLASS_ID"('SubSv
          cSpec'),"GET_SVCID"('smp_cpe_cas')))
   filter("SSP"."VAL"<>'140.00')
select sub_svc_id
from sub_svc_parm
where parm_id = get_parm_id(...)
and val <> '140.00'
and sub_svc_id in (select sub_svc_id from sub_svc where sub_svc_status_id not in (...));
select sub_svc_id
from sub_svc
where sub_svc_status_id not in (...)
and sub_svc_id in 
  (select * from sub_svc_parm where parm_id = get_parm_id(...) and val <> '140.00');
select sub_svc_id
from sub_svc ss
join sub_svc_parm ssp using (sub_svc_id)
where ss.sub_svc_status_id not in (...)
and ssp.parm_id = get_parm_id(...) 
and ssp.val <> '140.00');
select sub_svc_id
from sub_svc_parm
where parm_id = get_parm_id(...)
and val <> '140.00'
intersect
select sub_svc_id 
from sub_svc 
where sub_svc_status_id not in (...));