创建索引要诀

**

在使用索引時,你需要想起以下要诀

**
1.在升级Oracle版本时,确保测试应用程序的查询以确定查询的执行路径是否仍然在使用升级之前使用的索引。查看执行路径是否改变,并且查看这种改动的效果是更好还是更差。

2.查询DBA_INDEXES和DBA_IND_ COLUMNS以检索表上的索引列表。使用USER_INDEXES 和 USER_ IND_ COLUMNS检索当前方案的信息。

3.通过使用不可视索引,可以通过临时“关闭”索引(使之不可见)来检查查询在没有它们的情况下的性能。由于索引在不可见期间仍然被维护,因此在需要时打开它们(使之可见)是非常快速而简单的。

4.在Oracle 12c里,不可视索引也意味着可以在同一列上创建多个索引。这就允许白天的处理用一种类型的索引,晚上的处理用另一种不同类型的索引,甚至月处理时再选用一种类型。同一时刻只有一个索引可以被设置为可见的(除非另外的都是基于函数的索引)。

5.通过使用CREATE INDEX命令的COMPUTE STATISTICS子句,可以在一个步骤中创建并分析索引。但 是从Oracle 10g开始,如果索引不是空的,那么在创建或重建索引时总是会自动计算统计信息。

6.对表中的列使用默认值子句,这样就可以禁止使用NULL值,从而消除与使用NULL值相关的性能问题。

7.要保证会用上索引,应该对与列进行比较的值使用函数(例如TO_ DATE或TO_ CHAR)而不是列本身,在对列本身使用函数时就会抑制使用这些索引。

8.比较不匹配的数据类型可能 会导致在Oracle内部抑制对索引的使用。即使对查询使用EXPLAIN PLAN,也不能解释为什么会执行全表扫描。

9.索引的选择性可 以帮助基于成本的优化器决定一条执行路径。 索引的选择性越高,返回的行数就越少。可以通过建立复合/组合(多列)索引来提高索引的选择性。

10.对索引或表进行分析可以得到索引的二元高度。使用USER_INDEXES 视图中的BLEVEL列可以检查索引的二元高度。

11.如果索引中被删除的行数达到 20%~25%。重建索引可以帮助减少二元高度和一次i/o过程中读取的空闲空间量。

12.如果表中的数据是倾斜的,直方图可以为基于成本的优化器提供分布图。在那些没有数据倾斜的列上使用直方图并不会提高性能,反而可能降低性能。

13.对于有复合索引的大型表来说,索引的跳跃式扫描特性可以进行快速访问,即使索引的前导列没有出现在限制条件中。

14.已索引列的值存储在索引中。因此,可以建立组合(复合)索引,这样查询就可以直接访问这些索引,而不必从表中检索数据,同时也就减少了I/O。

15.对于低基数的列可以使用位图索引。性别列就是一个典 型的例子,性别只能是男或女(基数只能为2)。查询USER_INDEXES视图可以获得位图索引列表。

16.不要在高负载OLTP的环境中使用位图索引,对于有大量INSERT操作的表,如果有位图索引,就会带来锁的问题(每次INSERT操作會lock位图中与之相同的所有数据)。一定要记住位图索引的限制。

17考虑对那些经常通过在主键上指定值或范围扫描来访问数据的表使用索引组织表。

18如果磁盘数量有限,同时还有大量的有序载入操作要执行,反向键索引就是可行的方案。

19.为了在优化器中使用基于函数的索引,必须把初始参数QUERY REWRITE ENABLED设为true。

20.本地的有前缀索引可以帮助Oracle快速剪裁不必要的分区。如果分区不包含WHERE子句中所使用的任何一个值,就可以不用访问某些分区,这提高了语句的执行性能。

21.如果有全局索引,在修改分区表时指定ALTER TABLE命令的UPDATE GLOBAL INDEXES子句,默认情况下,在改变分区表时需要重建全局索引。oracle建议分区表不使用全局变量,因为这会大量消耗资源。分区表也尽量不使用主键。

22.使用位图连接索引改进数据仓库环境中连接的性能。

23.在ALTER INDEX语句中使用REBUILD选项可以使用已有索引而不是表来快速重建索引。

24.可以在重建索引时使用REBUILD ONLINE选项,以允许对表或分区同时进行DML操作。但不能在位图索引或那些强制关联完整性约束的索引上指定REBUILD ONLINE选项。

25.在12R2即以上版本中,可以在线将非分区表转换成分区表,包括索引。也可以设置分区和子分区为只读。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值