`
whzhaha
  • 浏览: 85026 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于ORACLE索引

阅读更多
oracle是一个庞大的知识体系,各个知识点之间存在着错综复杂的立体网状关系,孤立的引用某个
论点四处应用,南辕北辙的结果恐怕往往会伴随在你左右。同时,Oracle版本众多,同一个知识点在不同的版本里常有一些应用上的
区别,这也是需要引起足够重视的。
建立索引

分析索引
    虽然cost-base优化技术帮助了避免在查询中使用不被选中(nonselective)的索引,但是SQL引擎必然一直对表的所有索引进行维护,而不管这个索引是否被使用。在定操作很多的应用中,索引的维护会消耗非常巨大的CPU和I/O资源(resourse),换句话说,请不要建立不必要的索引。
    为了最优性能,删除(drop)所有不被使用的索引。你可以通过使用“ALTER INDEX MONITORING USAGE”这个监控功能一段时间,以观察索引的使用情况。这个监控功能记录了一个索引是否被使用。注意选择合适的工作量负载去监控(Be careful to select a representative workload to monitor)。
    Indexes within an application sometimes have uses that are not immediately apparent from a survey of statement execution plans. An example of this is a foreign key index on a parent table, which prevents share locks from being taken out on a child table.
    你可以通过“EXPLAIN PLAN”语句去判断你将要建立的索引是否会被你的应用用上。
    有一点要注意:当你在调整一个语句的性能是可能会影响到其他的语句。举个例子,你建立了一个索引给一语句使用,同时,oracle优化器也可能让其他的语句来使用这个索引。从这一点上来说,在你调整了这些语句后,最好重新检查这些语句的性能。
    注:
    你可以通过“Oracle Index TuningWizard”去检测一个表的索引的使用效率。类示的功能还存在于“Virtual Index Advisor”和“Oracle Expert”。

优化索引
维护索引


索引管理指导(guidelines):
1. 插入数据后,再建索引;
2. 如果你频繁的想去检索一张大表(retrieve)15%以下的行的话,那么就建立索引;
3. 为了提高联合查询的速度,往往有必要把联合用到的字段建立索引;
4. 小表没必要建立索引
5. 有必要建立索引的字段往往具有如下一个或者多个的特征:
   a. 字段的值比较具有唯一性
   b. 具有比较广的值域(wide range of values),适合建立普通(regular)索引
   c. 具有比较窄的值域(small range of values),适合建立位图(bitmap)索引
   d. 一个字段具有较多的null值,但是,查询语句往往只查具有值的行
6. 具有如下特征的行不合适建立索引:
   a. 字段值中有很多null,同时,又不去检索那些非null值
   b. long, long raw字段
7. 在CREATE INDEX语句中,几个字段[注:被建立复合索引的字段]之间的先后关系会影响查询的性能。
   一般情况下,把最常用的字段放在[复合索引位置中]最前面。举例说明:如果一个索引由三个字段组成:
   col1, col2, col3,那么,如果仅查询col1或者col1+col2,那么,这两都的查询速度都会加快,而那些
   只查询col2、col2或者col2+col3的语句将不会用到这个索引
8. 索引并不是越多越好,要注意表检索和表更新之间的性能衡
9. 指明索引的区块空间使用(Specify Index Block Space Use):
   如果你计划往被索引的表里插很多数据,那么,PCTFREE值应该比较大;而如果被索引的表的数据相对变
   化较小,那么,PCTFREE可以小一点[个人建议,如果表数据总是存在比较大的变动,那么,每次变动后,
   重建索引更合适]
10. 估计索引的大小,并设置[合理的]存储参数
11. 为索引指定表空间:
    表和索引建立在不同的表空间有利于性能[如果只有一个物理磁盘的话,意义不大]
12. 建立索引时考虑采用并行技术(Consider Parallelizing Index Creation)
    并行建立一个索引时,存储参数被每个[并行的]查询服务进程(query sever process)单独使用,因此,
    一个采用12个并行,INITIAL参数为5M的索引建立过程至少要用掉60M的存储[空间]
13. 建立索引时考虑使用“NOLOGGING”[参数],[这能带来不少的好处]
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics