• 让or使用索引


    select a.object_id, b.object_type
    from yz.t1 a
    left join yz.t5 b
    on a.object_type = b.object_type
    where (a.object_id = 919 or a.object_id1 = 919)
    and rownum = 1

    条件里有or执行计划不走索引,把or 前后列上都创建索引后,执行计划使用索引

    create index yz.idx_t1 on yz.t1(object_id)
    create index yz.idx1_t1 on yz.t1(object_id1)

    创建索引前和索引后执行计划对比如下

    [qdtais1]@ht19c01[/home/oracle]$./ora sql 68th03t6xnygy
    
    DBA_HIST_SQLSTAT detail(recent 15 days):
    
    
     SNAP_ID SNAP_DATE	      INST	  PHV	CPU_S	  EXECS     BUF_PE     ROW_PE	  MS_PE     DISK_R    IO_S     APP_MS
    -------- -------------------- ---- ---------- ------- --------- ---------- ---------- --------- ---------- ------- ----------
        1103 20220606 10:00 	 1  390571546	    0	      0 	12	    0	      2 	 0	 0	    0
    
    
    SQL top event in gv_active_session_history:
    
    
    
    Historical SQL plans in AWR:
    
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    SQL_ID 68th03t6xnygy
    --------------------
    select a.object_id,b.object_type from yz.t1 a left join yz.t5 b  on
    a.object_type=b.object_type  where (a.object_id=919 or
    a.object_id1=919) and  rownum =1
    
    Plan hash value: 390571546
    
    -----------------------------------------------------------------------------
    | Id  | Operation	    | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
    -----------------------------------------------------------------------------
    |   0 | SELECT STATEMENT    |	    |	    |	    | 30383 (100)|	    |
    |   1 |  COUNT STOPKEY	    |	    |	    |	    |		 |	    |
    |   2 |   NESTED LOOPS OUTER|	    |	  1 |	 33 | 30383   (1)| 00:00:02 |
    |   3 |    TABLE ACCESS FULL| T1    |	  1 |	 24 | 30383   (1)| 00:00:02 |
    |   4 |    INDEX UNIQUE SCAN| PK_T5 |	  1 |	  9 |	  0   (0)|	    |
    -----------------------------------------------------------------------------
    
    
    
    
    Current SQL plans in Curor:
    
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    SQL_ID	68th03t6xnygy, child number 0
    -------------------------------------
    select a.object_id,b.object_type from yz.t1 a left join yz.t5 b  on
    a.object_type=b.object_type  where (a.object_id=919 or
    a.object_id1=919) and  rownum =1
    
    Plan hash value: 529750346
    
    --------------------------------------------------------------------------------------------------
    | Id  | Operation			      | Name	| E-Rows |E-Bytes| Cost (%CPU)| E-Time	 |
    --------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT		      | 	|	 |	 |    34 (100)| 	 |
    |*  1 |  COUNT STOPKEY			      | 	|	 |	 |	      | 	 |
    |   2 |   NESTED LOOPS OUTER		      | 	|      2 |    48 |    34   (0)| 00:00:01 |
    |   3 |    TABLE ACCESS BY INDEX ROWID BATCHED| T1	|      2 |    30 |    34   (0)| 00:00:01 |
    |   4 |     BITMAP CONVERSION TO ROWIDS       | 	|	 |	 |	      | 	 |
    |   5 |      BITMAP OR			      | 	|	 |	 |	      | 	 |
    |   6 |       BITMAP CONVERSION FROM ROWIDS   | 	|	 |	 |	      | 	 |
    |*  7 |        INDEX RANGE SCAN 	      | IDX_T1	|	 |	 |     1   (0)| 00:00:01 |
    |   8 |       BITMAP CONVERSION FROM ROWIDS   | 	|	 |	 |	      | 	 |
    |*  9 |        INDEX RANGE SCAN 	      | IDX1_T1 |	 |	 |     1   (0)| 00:00:01 |
    |* 10 |    INDEX UNIQUE SCAN		      | PK_T5	|      1 |     9 |     0   (0)| 	 |
    --------------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - filter(ROWNUM=1)
       7 - access("A"."OBJECT_ID"=919)
       9 - access("A"."OBJECT_ID1"=919)
      10 - access("A"."OBJECT_TYPE"="B"."OBJECT_TYPE")
    
    Note
    -----
       - Warning: basic plan statistics not available. These are only collected when:
           * hint 'gather_plan_statistics' is used for the statement or
           * parameter 'statistics_level' is set to 'ALL', at session or system level
    
    
    
    Historical Plans Summary(dba_hist_sqlstat):
    
      RN PLAN_HASH_VALUE AVG_ETIME_S  AVG_CPU_S    AVG_BUFFERS  AVG_READS	AVG_ROWS     EXECS FIRST_SNAP	       LAST_SNAP
    ---- --------------- ------------ ------------ ----------- ---------- --------- --------- ------------------- -------------------
       1	   390571546	    0.002	 0.002		12	    0	      0	        1 2022-06-06 10:00:34 2022-06-06 10:00:34
    
    
    Current Plans Summary(gv_sql):
    
     RN PLAN_HASH_VALUE AVG_ETIME_S  AVG_CPU_S    AVG_BUFFERS  AVG_READS   AVG_ROWS TOTAL_EXEC FIRST_LOAD_TIME	LAST_ACTIVE
    ---- --------------- ------------ ------------ ----------- ---------- ---------- ---------- -------------------- --------------------
      1	  529750346	   0.016	0.013	      650	   7	      1 	 1 2022-06-06/09:30:30	2022-06-06 10:14:11
    
    
    Tables involved(used objects may not exists now):
    
    
    TABLE_OWNER		       TABLE_NAME			NUM_ROWS LAST_ANALYZED		  SIZE_M
    ------------------------------ ------------------------------ ---------- -------------------- ----------
    YZ			       T1				    9975 2022-06-06 10:08:41	     880
    YZ			       T5				      23 2022-06-06 10:08:45	       0
    
    
    Above is sql info for sql_id :68th03t6xnygy ,plan format is typical. for advanced plan ,use ora sql <sqlid> adv
    

      

  • 相关阅读:
    jQuery中jsonp的跨域处理,no access-control-allow-origin,unexpected token
    doT中嵌套for循环的使用
    c++ new带括号和不带括号
    python装饰器之使用情景分析
    Python中classmethod与staticmethod区别
    python作用域 scope
    duck type鸭子类型
    EAFP和LBYL 两种防御性编程风格
    c++重载、覆盖和隐藏
    c++ 名字粉碎(name mangling)
  • 原文地址:https://www.cnblogs.com/omsql/p/16347376.html
Copyright © 2020-2023  润新知