在表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]是一样的吗?

解决方案 »

  1.   

    问题: 
    1,索引index_a的叶子节点中包含null值吗? 
    2,'select * from t where a is null' 这条sql的话会用到索引index_a吗? 
      假如这条sql用上索引index_a的 话, 
    这条sql执行速度有索引index_a时是一样的吗?
      

  2.   

    is null 和is not null
    不会用到索引
      

  3.   

    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
      

  4.   

    1、B*Tree索引不存储null值,在索引字段允许为空的情况下,某些Oracle查询不会使用索引。
    2、is null 和is not null不会用到索引。