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 会让索引无效 关于索引列的组合顺序:([color=red]在较高版本中,如11G,不须要考虑这个问题[/color]) 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根据计划,也可能采用此索引进行索引跳跃式扫描。