关于ORACLE索引

    技术2022-05-11  18

    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”[参数],[这能带来不少的好处] from:http://whzhaha.javaeye.com/blog/231297

    最新回复(0)