Stay hungry Stay foolish

Oracle全局索引和本地索引的区别

Posted on By blue

 记得去年有次在一场笔试中,碰到这个问题。

 当时对oracle分区不太清楚,只知道有这个东西,实际工作中没用过。自然就没有答正确。

 隔了大半年了,上个项目中,由于经常需要处理上千万数量级的表,分区自然是少不了的。又想到了这个问题,所谓全局索引,说简单点,就是一个大索引,他可以指向多个分区。本地索引,也有叫分区索引的,就是一个分区,对应一个索引。

区别主要是有以下几点:

  1. 表的唯一性约束上,很显然,分区索引可以支持多个分区键值相同,但全局的就不行了。

  2. 在做DML 或者 truncate 、move,shrink等,全局索引可能都要受影响。分区索引就不同了。

  3. 位图索引只能为局部分区索引。

 看网上说,分区索引大部分应用在数据仓库中,这也能理解,数据仓库中数据量大嘛。

 综上所述,应根据实际项目情况来选择,如果表 以及每个分区里的数据量都非常大,且数据更新频繁,分区索引适合。毕竟频繁的索引更新也比较耗费系统资源。如果数据量相对小,数据不那么经常修改,使用全局索引,简化方便和管理。

 这两个索引当然涉及到速度快慢的问题,在网上找了点资料,

分区索引就是在所有每个区上单独创建索引,它能自动维护,在drop或truncate某个分区时不影响该索引的其他分区索引的使用,也就是索引不会失效,维护起来比较方便,但是在查询性能稍微有点影响。 全局索引就是在全表上创建索引,它可以创建自己的分区,可以和分区表的分区不一样,也就是它是独立的索引。查询性能比较快(因为不需要跨区操作)。

 这个说法就要待实际验证了。