oracle中null与索引问题?
在表t有千万条数据。
表t的a列中的数据中:0.1%的值[b]是null[/b]。
假如在表t的a字段上建了索引index_a,
问题:
1,索引index_a的叶子节点中包含null值吗?
2,'select * from t where a is null' 这条sql的话会用到索引index_a吗?
假如这条sql用[b]不[/b]上索引index_a的 话,
这条sql执行速度和[b]没有索引index_a时[/b]是一样的吗?
------解决方法--------------------------------------------------------
is null 和is not null
不会用到索引
------解决方法--------------------------------------------------------
2 使用IS NULL 或IS NOT NULL
使用IS NULL 或IS NOT NULL同样会限制索引的使用。因为NULL值并没有被定义。在SQL语句中使用NULL会有很多的麻烦。因此建议开发人员在建表时,把需要索引的列设成NOT NULL。如果被索引的列在某些行中存在NULL值,就不会使用这个索引(除非索引是一个位图索引,关于位图索引在稍后在详细讨论)。
Oracle 限制索引
http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4671674.aspx
------解决方法--------------------------------------------------------
1、B*Tree索引不存储null值,在索引字段允许为空的情况下,某些Oracle查询不会使用索引。
2、is null 和is not null不会用到索引。