oracle 区间索引,Oracle 分区索引初步理解

分区索引类型:局部分区索引与全局分区索引。局部分区索引使用与底层表相同的机制分区;全局分区索引使用与底层表不同的机制进行分区,索引按区间或散列对索引进行分区,一个全局索引分区可能指向任何表分区或所有表分区。

对于local索引,每一个表分区对应一个索引分区,当表的分区发生变化时,索引的维护由Oracle自动进行。

对于global索引,可以选择是否分区,而且索引的分区可以不与表分区相对应。当对分区进行维护操作时,通常会导致全局索引的INVALID,必须在执行完操作后 REBUILD。Oracle9i提供了UPDATE GLOBAL INDEXES语句,可以在进行分区维护的同时重建全局索引,UPDATE GLOBAL INDEXES是一种允许用资源耗费的增加来换取可用性的选项。

局部索引比全局索引容易管理,而全局索引比较快。

局部索引多应用于数据仓库环境中,而全局索引多应用于oltp系统中。

局部前缀索引与局部非前缀索引:如果局部索引的索引列以分区键开头,则称为前缀局部索引。

如果局部索引的列不是以分区键开头,或者不包含分区键列,则称为非前缀索引。

5d3eaf1a3df171d91285c4163e2a8db6.gif

像下面这样的查询(a为分区键):

Select … from partitioned_table where a=a:aand b=:b;

Select … from partitioned_table where b=:b;

可以考虑在(b,a)上建立局部非前缀索引。而如果在(a,b)上建立局部前缀索引,第二个查询不会走索引。

createtablerange

(idint,

namevarchar2(20) ,

address varchar2(10)

)

partitionbyrange(address)

(

partition p1valuesless than('A') ,

partition p2valuesless than('F') ,

partition p3valuesless than('Y') ,

partition p4valuesless than('Z')

)

13  /

Tablecreated.

SQL>insertintorangeselectrownum,owner,'A'fromdba_objectswhererownum<1000;

999rowscreated.

SQL>insertintorangeselectrownum + 999,owner,'F'fromdba_objectswhererownum<1000;

999rowscreated.

SQL>selectmax(id)fromrange;

MAX(ID)

----------

1998

SQL>insertintorangeselectrownum + 999 + + 999,owner,'Y'fromdba_objectswhererownum<1000;

999rowscreated.

SQL>commit;

Commitcomplete.

SQL>selectname,count(name)fromrangegroupbyname;

NAMECOUNT(NAME)

-------------------- -----------

PUBLIC237

OUTLN                         21

SYS                         2739

SQL>setautot traceonly

SQL>selectid,name,addressfromrangewhereaddress='Y'andname='OUTLN';

7rowsselected.

Execution Plan

----------------------------------------------------------

Plan hash value: 955737907

------------------------------------------------------------------------------------------------

| Id  | Operation              |Name|Rows| Bytes | Cost (%CPU)|Time| Pstart| Pstop |

------------------------------------------------------------------------------------------------

|   0 |SELECTSTATEMENT       |       |     7 |   224 |     2   (0)| 00:00:01 |       |       |

|   1 |  PARTITION RANGE SINGLE|       |     7 |   224 |     2   (0)| 00:00:01 |     4 |     4 |

|*  2 |TABLEACCESSFULL| RANGE |     7 |   224 |     2   (0)| 00:00:01 |     4 |     4 |

------------------------------------------------------------------------------------------------

Predicate Information (identifiedbyoperation id):

---------------------------------------------------

2 - filter("ADDRESS"='Y'AND"NAME"='OUTLN')

Note

-----

-dynamicsampling usedforthis statement

Statistics

----------------------------------------------------------

0  recursive calls

0  db block gets

6  consistent gets

0  physical reads

0  redosize

610  bytes sent via SQL*Nettoclient

385  bytes received via SQL*Netfromclient

2  SQL*Net roundtripsto/fromclient

0  sorts (memory)

0  sorts (disk)

7rowsprocessed

SQL>selectid,name,addressfromrangewherename='OUTLN';

21rowsselected.

Execution Plan

----------------------------------------------------------

Plan hash value: 184025858

---------------------------------------------------------------------------------------------

| Id  | Operation           |Name|Rows| Bytes | Cost (%CPU)|Time| Pstart| Pstop |

---------------------------------------------------------------------------------------------

|   0 |SELECTSTATEMENT    |       |    21 |   672 |     4   (0)| 00:00:01 |       |       |

|   1 |  PARTITION RANGEALL|       |    21 |   672 |     4   (0)| 00:00:01 |     1 |     4 |

|*  2 |TABLEACCESSFULL| RANGE |    21 |   672 |     4   (0)| 00:00:01 |     1 |     4 |

---------------------------------------------------------------------------------------------

Predicate Information (identifiedbyoperation id):

---------------------------------------------------

2 - filter("NAME"='OUTLN')

Note

-----

-dynamicsampling usedforthis statement

Statistics

----------------------------------------------------------

5  recursive calls

0  db block gets

42  consistent gets

0  physical reads

0  redosize

867  bytes sent via SQL*Nettoclient

396  bytes received via SQL*Netfromclient

3  SQL*Net roundtripsto/fromclient

0  sorts (memory)

0  sorts (disk)

21rowsprocessed

SQL>createindexidx_preonrange(address,name)local;--建立前缀索引

Indexcreated.

SQL>selectid,name,addressfromrangewhereaddress='Y'andname='OUTLN';

7rowsselected.

Execution Plan

----------------------------------------------------------

Plan hash value: 1638943077

--------------------------------------------------------------------------------------------------------------

| Id  | Operation                          |Name|Rows| Bytes | Cost (%CPU)|Time| Pstart| Pstop |

--------------------------------------------------------------------------------------------------------------

|   0 |SELECTSTATEMENT                   |         |     7 |   224 |     2   (0)| 00:00:01 |       |       |

|   1 |  PARTITION RANGE SINGLE            |         |     7 |   224 |     2   (0)| 00:00:01 |     4 |     4 |

|   2 |TABLEACCESSBYLOCALINDEXROWID| RANGE   |     7 |   224 |     2   (0)| 00:00:01 |     4 |     4 |

|*  3 |INDEXRANGE SCAN                | IDX_PRE |     1 |       |     1   (0)| 00:00:01 |     4 |     4 |

--------------------------------------------------------------------------------------------------------------

Predicate Information (identifiedbyoperation id):

---------------------------------------------------

3 - access("ADDRESS"='Y'AND"NAME"='OUTLN')

Note

-----

-dynamicsampling usedforthis statement

Statistics

----------------------------------------------------------

0  recursive calls

0  db block gets

5  consistent gets

0  physical reads

0  redosize

610  bytes sent via SQL*Nettoclient

385  bytes received via SQL*Netfromclient

2  SQL*Net roundtripsto/fromclient

0  sorts (memory)

0  sorts (disk)

7rowsprocessed

SQL>select/*+index(range idx_pre)*/ id,name,addressfromrangewherename='OUTLN';--没有使用索引

21rowsselected.

Execution Plan

----------------------------------------------------------

Plan hash value: 184025858

---------------------------------------------------------------------------------------------

| Id  | Operation           |Name|Rows| Bytes | Cost (%CPU)|Time| Pstart| Pstop |

---------------------------------------------------------------------------------------------

|   0 |SELECTSTATEMENT    |       |    21 |   672 |     4   (0)| 00:00:01 |       |       |

|   1 |  PARTITION RANGEALL|       |    21 |   672 |     4   (0)| 00:00:01 |     1 |     4 |

|*  2 |TABLEACCESSFULL| RANGE |    21 |   672 |     4   (0)| 00:00:01 |     1 |     4 |

---------------------------------------------------------------------------------------------

Predicate Information (identifiedbyoperation id):

---------------------------------------------------

2 - filter("NAME"='OUTLN')

Note

-----

-dynamicsampling usedforthis statement

Statistics

----------------------------------------------------------

5  recursive calls

0  db block gets

42  consistent gets

0  physical reads

0  redosize

867  bytes sent via SQL*Nettoclient

396  bytes received via SQL*Netfromclient

3  SQL*Net roundtripsto/fromclient

0  sorts (memory)

0  sorts (disk)

21rowsprocessed

SQL>createindexidx_nonpreonrange(name,address)local;

Indexcreated.

SQL>selectid,name,addressfromrangewhereaddress='Y'andname='OUTLN';

7rowsselected.

Execution Plan

----------------------------------------------------------

Plan hash value: 1326523914

-----------------------------------------------------------------------------------------------------------------

| Id  | Operation                          |Name|Rows| Bytes | Cost (%CPU)|Time| Pstart| Pstop |

-----------------------------------------------------------------------------------------------------------------

|   0 |SELECTSTATEMENT                   |            |     7 |   224 |     2   (0)| 00:00:01 |       |       |

|   1 |  PARTITION RANGE SINGLE            |            |     7 |   224 |     2   (0)| 00:00:01 |     4 |     4 |

|   2 |TABLEACCESSBYLOCALINDEXROWID| RANGE      |     7 |   224 |     2   (0)| 00:00:01 |     4 |     4 |

|*  3 |INDEXRANGE SCAN                | IDX_NONPRE |     1 |       |     1   (0)| 00:00:01 |     4 |     4 |

-----------------------------------------------------------------------------------------------------------------

Predicate Information (identifiedbyoperation id):

---------------------------------------------------

3 - access("NAME"='OUTLN'AND"ADDRESS"='Y')

Note

-----

-dynamicsampling usedforthis statement

Statistics

----------------------------------------------------------

0  recursive calls

0  db block gets

5  consistent gets

0  physical reads

0  redosize

610  bytes sent via SQL*Nettoclient

385  bytes received via SQL*Netfromclient

2  SQL*Net roundtripsto/fromclient

0  sorts (memory)

0  sorts (disk)

7rowsprocessed

SQL>select/*+index(range idx_nonpre)*/ id,name,addressfromrangewherename='OUTLN';--使用索引

21rowsselected.

Execution Plan

----------------------------------------------------------

Plan hash value: 279219031

-----------------------------------------------------------------------------------------------------------------

| Id  | Operation                          |Name|Rows| Bytes | Cost (%CPU)|Time| Pstart| Pstop |

-----------------------------------------------------------------------------------------------------------------

|   0 |SELECTSTATEMENT                   |            |    21 |   672 |    11   (0)| 00:00:01 |       |       |

|   1 |  PARTITION RANGEALL|            |    21 |   672 |    11   (0)| 00:00:01 |     1 |     4 |

|   2 |TABLEACCESSBYLOCALINDEXROWID| RANGE      |    21 |   672 |    11   (0)| 00:00:01 |     1 |     4 |

|*  3 |INDEXRANGE SCAN                | IDX_NONPRE |     2 |       |     5   (0)| 00:00:01 |     1 |     4 |

-----------------------------------------------------------------------------------------------------------------

Predicate Information (identifiedbyoperation id):

---------------------------------------------------

3 - access("NAME"='OUTLN')

Note

-----

-dynamicsampling usedforthis statement

Statistics

----------------------------------------------------------

0  recursive calls

0  db block gets

14  consistent gets

0  physical reads

0  redosize

867  bytes sent via SQL*Nettoclient

396  bytes received via SQL*Netfromclient

3  SQL*Net roundtripsto/fromclient

0  sorts (memory)

0  sorts (disk)

21rowsprocessed0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值