Oracle编程艺术阅读笔记-2

1. 位图索引。
     不适合频繁更新的表。因为更新时会锁定位图索引对应的一系列记录,
   这样其他用户就会被阻塞。
     他不同于B*索引。因为B*索引和记录是一一对应的。 一条索引只有唯一的记录和他对应。
   而一条位图索引,则对应着很多条记录,这点详细可以参照位图索引的结构来分析。
   所以更新时B*只会锁定他对应的当前记录,而位图索引则会锁定很多条。

2. 函数索引
   自定义函数索引时,注意函数需要用determinstic修饰,表明是确定性函数。
   对于某一个索引,如果该索引对应列全部为Null,则没有对应的索引生成。
   可以只对部分行建立索引,方法是 create index part_index on sample_table
   ( case column1 when 'N' then 'N' end)。这样只对column1 为N的行建立索引。

3. B*索引
   注意索引列的默认类型转化会导致索引无效。
   注意 is null 会让索引无效
   关于索引列的组合顺序:( 在较高版本中,如11G,不需要考虑这个问题
       1.根据系统索引的使用情况分析:where c1='1' and c2='2'
         和 where c2='2' 这样的话索引就应该是 c2 c1的顺序,
          这两个查询才能都用到索引。
        2. 根据数据的具体情况。如果c1对应的行数较少的话,倾向于c1前导。
           因为一是这样可以用到索引压缩。二是因为oracle从6版本开始有了行级锁,这样之前的那种说法“将最具有差别的放在索引的前导”就不成立了。三是在索引为c2 c1的情况下,即使where条件中不包含c1,即 where c1= ‘1’ 时,oracle根据计划,也可能采用此索引进行索引跳跃式扫描。



猜你喜欢

转载自swearyd7.iteye.com/blog/1777467