• 组合索引避免索引扫描后在过滤


    SQL>  select corp_org,count(*) from test_2 where end_dt > date'2013-05-01'
      2  group by  corp_org   order by count(*) desc;
    
    CORP_ORG     COUNT(*)
    ---------- ----------
    15601        236734
    31170          2549
    43530          1309
    34001          1238
    34210          1049
    65100           977
    58100           871
    65300           566
    66740           302
    73100           158
    
    10 rows selected.
    
    SQL> select t.agmt_id,t.start_dt,t.end_dt from  test_1 t  where agmt_id='320100629000007';
    select t.agmt_id,t.start_dt,t.end_dt from  test_1 t  where agmt_id='320100629000007'
    AGMT_ID 				 START_DT   END_DT
    ---------------------------------------- ---------- ----------
    320100629000007 			 2010-12-31 2011-01-22
    320100629000007 			 2011-01-22 2011-02-28
    320100629000007 			 2011-02-28 2011-08-01
    320100629000007 			 2011-08-01 2011-12-06
    320100629000007 			 2011-12-06 2012-02-13
    320100629000007 			 2012-02-13 2013-04-22
    320100629000007 			 2013-04-22 2013-05-31
    320100629000007 			 2013-05-31 2013-06-21
    320100629000007 			 2013-06-21 2999-12-31
    
    9 rows selected.
    
    SQL> select count(*) from test_2 where end_dt > date'2013-05-01';
    
      COUNT(*)
    ----------
        245753
    
    SQL> select count(*) from test_2 ;
    
      COUNT(*)
    ----------
       1028959
    
    create index test_2_idx2 on test_2(end_dt,corp_org)
    
    create index test_2_idx1 on test_2(end_dt)
    
    
    SQL> select * from test_2 where end_dt > date'2013-05-01'
    and corp_org='15601'  2  ;
    
    236734 rows selected.
    
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 4012525493
    
    -------------------------------------------------------------------------------------------
    | Id  | Operation		    | Name	  | Rows  | Bytes | Cost (%CPU)| Time	  |
    -------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT	    |		  |  5802 |  3518K| 21473   (1)| 00:04:18 |
    |*  1 |  TABLE ACCESS BY INDEX ROWID| TEST_2	  |  5802 |  3518K| 21473   (1)| 00:04:18 |
    |*  2 |   INDEX RANGE SCAN	    | TEST_2_IDX1 | 58501 |	  |   159   (1)| 00:00:02 |
    -------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - filter("CORP_ORG"='15601')
       2 - access("END_DT">TO_DATE(' 2013-05-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
    
    
    Statistics
    ----------------------------------------------------------
    	  1  recursive calls
    	  0  db block gets
         322183  consistent gets
    	  0  physical reads
    	  0  redo size
       71706482  bytes sent via SQL*Net to client
         174094  bytes received via SQL*Net from client
          15784  SQL*Net roundtrips to/from client
    	  0  sorts (memory)
    	  0  sorts (disk)
         236734  rows processed
    
    
    创建组合索引;
    
    create index test_2_idx2 on test_2(end_dt,corp_org)
    
    
    SQL> select * from test_2 where end_dt > date'2013-05-01'
    and corp_org='15601';  2  
    
    236734 rows selected.
    
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 2871838242
    
    -------------------------------------------------------------------------------------------
    | Id  | Operation		    | Name	  | Rows  | Bytes | Cost (%CPU)| Time	  |
    -------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT	    |		  |  5802 |  3518K|  2252   (1)| 00:00:28 |
    |   1 |  TABLE ACCESS BY INDEX ROWID| TEST_2	  |  5802 |  3518K|  2252   (1)| 00:00:28 |
    |*  2 |   INDEX SKIP SCAN	    | TEST_2_IDX2 |  5802 |	  |   105   (1)| 00:00:02 |
    -------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       2 - access("END_DT">TO_DATE(' 2013-05-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss')
    	      AND "CORP_ORG"='15601' AND "END_DT" IS NOT NULL)
           filter("CORP_ORG"='15601')
    
    
    Statistics
    ----------------------------------------------------------
    	  0  recursive calls
    	  0  db block gets
         347799  consistent gets
    	  0  physical reads
    	  0  redo size
       71706482  bytes sent via SQL*Net to client
         174094  bytes received via SQL*Net from client
          15784  SQL*Net roundtrips to/from client
    	  0  sorts (memory)
    	  0  sorts (disk)
         236734  rows processe
    
    SQL> select * from test_2 where end_dt > date'2013-05-01' and corp_org='15601';  2  
    
    236734 rows selected.
    
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 1693794533
    
    -------------------------------------------------------------------------------------------
    | Id  | Operation		    | Name	  | Rows  | Bytes | Cost (%CPU)| Time	  |
    -------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT	    |		  | 55903 |    33M| 20844   (1)| 00:04:11 |
    |   1 |  TABLE ACCESS BY INDEX ROWID| TEST_2	  | 55903 |    33M| 20844   (1)| 00:04:11 |
    |*  2 |   INDEX RANGE SCAN	    | TEST_2_IDX2 | 55903 |	  |   206   (1)| 00:00:03 |
    -------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       2 - access("END_DT">TO_DATE(' 2013-05-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss')
    	      AND "CORP_ORG"='15601' AND "END_DT" IS NOT NULL)
           filter("CORP_ORG"='15601')
    
    
    Statistics
    ----------------------------------------------------------
    	  1  recursive calls
    	  0  db block gets
         319728  consistent gets
    	  0  physical reads
    	  0  redo size
       71706482  bytes sent via SQL*Net to client
         174094  bytes received via SQL*Net from client
          15784  SQL*Net roundtrips to/from client
    	  0  sorts (memory)
    	  0  sorts (disk)
         236734  rows processed
    
    
    
    select /*+ index(test_2 test_2_idx1)*/* from test_2 where end_dt > date'2013-05-01' and corp_org='15601'; 
    
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 4012525493
    
    -------------------------------------------------------------------------------------------
    | Id  | Operation		    | Name	  | Rows  | Bytes | Cost (%CPU)| Time	  |
    -------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT	    |		  |  5802 |  3518K| 21473   (1)| 00:04:18 |
    |*  1 |  TABLE ACCESS BY INDEX ROWID| TEST_2	  |  5802 |  3518K| 21473   (1)| 00:04:18 |
    |*  2 |   INDEX RANGE SCAN	    | TEST_2_IDX1 | 58501 |	  |   159   (1)| 00:00:02 |
    -------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - filter("CORP_ORG"='15601')
       2 - access("END_DT">TO_DATE(' 2013-05-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
    
    
    Statistics
    ----------------------------------------------------------
    	  1  recursive calls
    	  0  db block gets
         322183  consistent gets
    	  0  physical reads
    	  0  redo size
       71706482  bytes sent via SQL*Net to client
         174094  bytes received via SQL*Net from client
          15784  SQL*Net roundtrips to/from client
    	  0  sorts (memory)
    	  0  sorts (disk)
         236734  rows processed
    
    
    
    
    
    

  • 相关阅读:
    Oracle存储过程获取YYYY-MM-DD的时间格式
    EXP/IMP 导出生产库表的指定数据到测试库一例
    java sm4国密算法加密、解密
    oracle 三表关联查询
    oracle 两表关联查询
    oracle 批量更新之将一个表的数据批量更新至另一个表
    js 不固定传参
    CocoaPods为project的全部target添加依赖支持
    QML 开发神奇加成之为网络资源设置本地缓存
    一步步走向国际乱码大赛-- 恶搞C语言
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352369.html
Copyright © 2020-2023  润新知