日期:2014-05-16  浏览次数:20481 次

Oracle11g Performance笔记1
1. 跳跃式索引(Skip Scan Index)
	当表有一个复合索引,而在查询中有除了索引中第一列的其他列作为条件,并且优化器模式为CBO,这时候查询计划就有可能使用到SS。此外,还可以通过使用提示index_ss(CBO下)来强制使用SS。
 select /*+index_ss(test1 test_idx1)*/* from test1 where column_b ='sdfee'; 
   并不是任何情况下都会使用到SS。在Oracle的官方文档中,除了提到需要CBO,并且对表进行过分析外,还需要保证第一列的distinct value非常小。

 2. 对于local索引,每一个表分区对应一个索引分区,当表的分区发生变化时,索引的维护由Oracle自动进行。
 
    对于global索引,可以选择是否分区,而且索引的分区可以不与表分区相对应。

    并不是只有分区表才能对应分区索引。如果一个非分区表有需要,是可以将其索引分区的。

    分区索引是我们在设计分区表中不能回避的问题。针对不同的应用场景,选择合适的分区索引,才能做到真正的设计优化。


    分治是一种古老的考虑方法,将复杂问题进行简化,大面积的削减备选集合,是很多现代算法和现代系统设计的核心要义。

 4. 何时建分区,分区类别,索引?

	a. 2G以上的表,ORACLE推荐创建分区。

	b. 分区的方式根据实际情况而定,才能提高整体性能。

	c. 分区的字段一定要是经常用以提取数据的字段,否则会在提取过程中导致遍历多个分区,这样比没有分区还要慢。

	d. 分区字段要选择合适,数据较为均匀分布到各个分区,不要太多也不要太少,而且根据分区字段可以很快定位到分区范围。

     注:一般情况下尽量让业务操作在同一个分区内部完成,跨分区访问性能会受到影响。

5. 分区类主要有:RANGE、LIST、HASH

   a. RANGE通过值的范围分区,也是最常用的分区.

   b. LIST是列举方式进行分区,一般作为二级分区而存在当然也可以自己分区,ORACLE 11G后在分区上也可以作为主分区而存在,在RANGE基础上,若数据需要继续分区,并且在RANGE基础上数据量较为固定,只是较大,可以按照一定规则进一步分区。  } 

   c. HASH只指定分区个数,分区细节由ORACLE完成,增加HASH分区可以重新分布数据。

 注意:分区字段不能使用函数转换后再分区,如,将某数字字符串字段,先TO_NUMER(COL_NAME)后分区。

6. 索引;大致分:GLOBAL索引和LOCAL索引

   GLOBAL不分区索引一般不太推荐,因为是用一颗大的索引树来映射一个表,这个过程,这样速度不见得比不分区快。

   GLOBAL分区索引,查找数据若通过要通过索引,是先定位了索引内部的分区,然后在这个分区索引中找到ROWID,然后回表提取数据。

   LOCAL索引是和分区的个数逐个对应的,可以说先定位分区表的分区也可以说先定位索引的分区,因为他们是一一对应的,找到对应分区后,分区内部索引数据集合。

7. 分区表、索引、分区索引,要利用其性能优势,最基本就是要提取数据时,要通过它首先将数据的范围缩小到一个即使做全盘扫描也不会太慢的情况。
 

8. SQL一定要有分区上的这个字段的一个WHERE条件,将数据迅速定位到分区内部,而且尽量定位到一个分区里面(这个和创建分区的规则有关系)。

9. 建立分区本身不提高性能,只有用好分区才能提高性能,在RAC集群中,若存在多分区提取数据,适当采用并行提取可以提高提取的速度.