LLL的数据库培训-83-第五部分—Oracle11g-Oracle SQL对象管理—第10讲—索引之B树索引子类型-唯一索引/反向键索引/键压缩索引/降序索引
一、Btree索引的变异类型
1、唯一索引(Unique Index):
唯一索引确保索引列中的值是唯一的,即索引列不允许有重复值。
它可以用来实现主键或唯一约束,防止重复的值插入到索引列中。
在唯一索引上进行查找时,查询会更加高效,因为数据库知道只需找到一行即可停止查找。
2、反向键索引(Reverse Key Index):
反向键索引是一种特殊类型的索引,用于减少索引键的不平衡和争用。
它使用一种算法将索引键的值反转并重新组织,以使索引值更均匀地分布在索引结构中。
这样可以减少索引节点的频繁分裂和合并,提高插入和更新操作的性能。
注意:无法将位图索引和IOT设置为反向键索引。
3、键压缩索引(Key Compression Index):
键压缩索引是一种索引压缩技术,通过使用更少的存储空间来存索引键的值。
它使用一种算法将相邻的索引键值进行压缩和编码,以减少存储空间的使用。
键压缩索引可以在有限的存储资源下提供更好的性能,减少内存开销、提高缓存效率和查询速度。
4、降序索引(Descending Index):
降序索引是一种按照降序(递减)顺序存储索引键的值的索引。
它通常用于支持按降序排序的查询,以满足特定业务需求。
降序索引可以通过使用特殊的索引选项或在查询中指定 DESC 关键字来创建和使用。
二、创建索引
1、创建唯一索引
(1)语法
CREATE UNIQUE INDEX index_name ON table_name (column_name);
(2)案例:
CREATE UNIQUE INDEX idx_unique_employee_id ON employees (employee_id);
2、创建反向键索引
(1)语法
CREATE INDEX index_name ON table_name (column_name) REVERSE;
(2)案例:
CREATE INDEX idx_reverse_last_name ON employees (last_name) REVERSE;
3、键压缩索引
(1)语法
CREATE INDEX index_name ON table_name (column_name) COMPRESS;
(2)案例:
CREATE INDEX idx_compressed_salary ON employees (salary) COMPRESS;
4、创建降序索引
(1)语法
CREATE INDEX index_name ON table_name (column_name [DESC]);
(2)案例
CREATE INDEX idx_descending_date ON orders (order_date DESC);
三、索引维护
1、Oracle重建索引Rebuild语句
Oracle重建索引Rebuild语句是Oracle数据库中常用的语句之一,它可以在不改变索引结构的情况下,对索引进行重建。
重建索引可以改善索引的性能,减少其拥有的空间,也可以用于索引的修复。
2、重建索引Rebuild语句的格式如下:
ALTER INDEX index_name REBUILD [PARAMETERS('parameter1=value1[,parameter2=value2]...')] [TABLESPACE tablespace_name] [PCTFREE integer] [INITRANS integer] [MAXTRANS integer] [STORAGE (storage_clause)] [COMPUTE STATISTICS];
其中,index_name 是要重建的索引名称。
PARAMETERS 参数指定了一些重建的选项,这些参数可以让我们指定重建时包含的数据,例如ONLINE、MONITORING 等。 TABLESPACE 参数指定了重建时使用的表空间,可以是索引原来使用的表空间,也可以是新的表空间,如果不指定,则会使用索引原来使用的表空间。 PCTFREE 和 PCTUSED 参数指定了重建时所使用的空闲空间大小,它们可以在重建的同时为索引提供更好的性能。 INITRANS 和 MAXTRANS 参数指定了重建时所使用的事务数,它们可以影响索引的性能。 STORAGE 参数指定了重建时使用的存储参数,它可以影响索引的性能。 COMPUTE STATISTICS 参数指定了是否重新计算索引的统计信息,这可以提高索引的性能。 如: CREATE INDEX "TEST"."IND_TEST10_ID_UK1" ON "TEST"."TEST10" ("ID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "USERS"
3、重建索引Rebuild语句的作用
(1)重建索引Rebuild语句可以改善索引的性能。重建索引可以把索引中的数据重新排列,使索引更有效,提高索引的性能; (2)重建索引Rebuild语句可以减少索引的空间。重建索引可以消除索引中的空洞,使得索引可以更有效地使用空间; (3)重建索引Rebuild语句可以用于索引的修复。当索引因为意外情况而损坏时,可以使用重建索引Rebuild语句来修复索引; (4)重建索引Rebuild语句可以计算索引的统计信息,从而提高索引的性能。
4、重建索引Rebuild语句的注意事项
(1)重建索引Rebuild语句会锁定索引,因此在执行重建索引Rebuild语句时,应避免并发的操作; (2)重建索引Rebuild 语句会消耗大量的系统资源,因此应在空闲的时候执行重建索引 Rebuilding 语句; (3)重建索引Rebuild语句可能会影响索引的性能,所以应定期监控索引的性能; (4)重建索引Rebuild语句可能会影响数据库的空间使用情况,因此应定期监控数据库的空间使用情况; (5)重建索引Rebuild语句可能会影响数据库的事务处理能力,因此应定期监控数据库的事务处理能力。
5、索引删除
drop index index_name;
四、注意事项
1、唯一索引和唯一约束/主键约束的关系与区别
(1)创建唯一键约束或主键约束,会自动创建唯一索引
(2)创建唯一索引,不会自动创建唯一键约束,但索引仍然会强制数据列保持唯一性。
create unique index uk_test on test(id);
(3)创建唯一索引后,可以在dba/all/user_indexes中查到此索引,但无法在dba/all/user_constraints中找到与此列相关的唯一约束。
select owner,index_name,index_type,table_name from dba_indexes where table_name='TEST' and owner='SYS'; select * from dba_constraints where table_name='TEST' and owner='SYS';
insert into test value(1,'LLL01'); insert into test value(1,'LLL02');
(4)创建唯一索引后,要明确的将约束关联到唯一索引上,可以使用此句:
alter table test add constraint idx_test unique(id); select owner,constraint_name,table_name from dba_constraints where table_name='TEST' and owner='SYS';