• 测试技术
  • 博客
  • 视频
  • 开源
  • 论坛
  • 沙龙
  • 下载
  • 杂志
  • 招聘

字号: | 推荐给好友 上一篇 | 下一篇

ORACLE SQL性能优化系列 (六)

发布: 2008-10-27 13:16 | 作者: black_snail  | 来源: net130 | 查看: 3次 | 进入领测软件测试网论坛讨论

领测软件测试网

N%j4}-t ezTzz 软件测试技术门户&@B'b'|7K T^:i

38. 避免在索引列上使用IS NULL和IS NOT NULL

#d{-o3Yq&X

  避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引 .对于单列索引,如果列包含空值,索引中将不存在此记录. 对于复合索引,如果每个列都为空,索引中同样不存在此记录. 如果至少有一个列不为空,则记录存在于索引中.软件测试技术门户h,J$]%J Dq@3arn

  举例:

1^ c7cG-U;|7E

  如果唯一性索引建立在表的A列和B列上, 并且表中存在一条记录的A,B值为(123,null) , ORACLE将不接受下一条具有相同A,B值(123,null)的记录(插入). 然而如果软件测试技术门户;|!cD4Hx { t*D)DT{

  所有的索引列都为空,ORACLE将认为整个键值为空而空不等于空. 因此你可以插入1000条具有相同键值的记录,当然它们都是空!软件测试技术门户2`!^aS5HV!Xp

  因为空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使ORACLE停用该索引.软件测试技术门户 Zx6U,^C8H*S:e&\d)z

  举例:软件测试技术门户?6_ A:?