引言
Oracle中的表有分区表和非分区表,索引也有分区索引和非分区索引。不管是分区表还是非分区表,既可以建分区索引,也可以建非分区索引,两者没有严格的限制关系。
分区索引的作用与分类
与分区表类似(partitioned table),分区索引(partitioned index)也能够提高系统的可管理性,可用性,可伸缩性,及系统性能。对于分区索引,需要区分创建的是全局索引、还是本地索引。
分区索引既可以与分区表相对独立(全局索引,global index),也可以采用与分区表相同的分区方式(本地索引,local index)。
本地索引(Local Index)是数据库管理系统中的一种索引类型,它在每个分区内独立进行索引。每个分区都有一个独立的索引结构,与表的分区结构相对应。本地索引通过将索引与数据分区对齐,可以简化分区表的管理和维护,同时提高查询性能。
本地索引与全局索引(Global Index)的主要区别在于:
本地索引:在每个分区内进行索引,每个分区有一个独立的索引。索引结构与表的分区结构一致。
全局索引:在整个表范围内进行索引,索引结构独立于表的分区结构。
本地索引在分区表的维护(如分区的添加、删除、合并等)过程中更为简单,因为索引的维护工作仅限于受影响的分区。
创建本地索引的SQL语句:1
2
3
4create index index_name on table_name (column_name1,column_name2) local
[online] tablespace tablespace _name
nologging
parallel x;
online:在线与非在线。区别:非在线锁表,优先创建索引,此时DML都被阻塞,所以快;相反,在线锁的是行而非表,通过临时表进行索引的创建,所以不会影响DML操作,但副作用就是慢。如果在生产环境操作,不停服务的话,势必导致创建索引期间仍有DML操作进来。另外如果是大表,那么采用非在线而导致锁表所带来的影响可能会很大。一句话,生产环境不停服的脚本操作,建议使用online。