代码之家  ›  专栏  ›  技术社区  ›  Hunter Nelson

非聚集索引中null存储的顺序是什么

  •  0
  • Hunter Nelson  · 技术社区  · 7 年前

    我在非聚集索引中有一些列,其中的值为null,例如过期日期。列中的某些值为null,并且提供了一些值。查询列的方式是检索null或大于某个过期日期的值。我在索引中使用这个列,如果我先用null按降序检索,效率会最高。所以我想我有一个由两部分组成的问题:

    1. null以什么顺序存储在非聚集索引中?ASC索引中的第一个为空,DESC索引中的最后一个为空?我的一个同事似乎认为在这两种情况下,null都是先存储的。他还提到,不同版本的sql server对null的处理方式不同。
    2. 有没有办法在非聚集索引中首先强制为null?这在某种程度上取决于问题1的答案,但假设为了参数起见,索引是按顺序处理的,其中null是ASC顺序中的第一个。有没有一种方法可以创建一个非聚集索引,该索引按降序存储值,但首先使用null?
    1 回复  |  直到 7 年前
        1
  •  2
  •   Sean Lange    7 年前

    这很容易测试。以下查询中带NULL的行在哪里?

    select *
    from
    (
        select SomeVal = 1 union all
        select 2 union all
        select null
    ) x
    order by x.SomeVal desc
    
    
    select *
    from
    (
        select SomeVal = 1 union all
        select 2 union all
        select null
    ) x
    order by x.SomeVal