zoukankan      html  css  js  c++  java
  • 组合索引避免索引扫描后在过滤

    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
    
    
    
    
    
    

  • 相关阅读:
    POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)
    UVaLive 5031 Graph and Queries (Treap)
    Uva 11996 Jewel Magic (Splay)
    HYSBZ
    POJ 3580 SuperMemo (Splay 区间更新、翻转、循环右移,插入,删除,查询)
    HDU 1890 Robotic Sort (Splay 区间翻转)
    【转】ACM中java的使用
    HDU 4267 A Simple Problem with Integers (树状数组)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4417 Super Mario (树状数组/线段树)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352369.html
Copyright © 2011-2022 走看看