什么顺序为null存储在非聚集索引中

时间:2017-11-13 20:00:20

标签: sql-server sql-server-2008 indexing

我在非聚集索引中有一些列,其值为null,其中一个例如是到期日期。列中有一些值为null且一些值已提供。查询列的方式是检索null或大于某个到期日期的值。我在索引中使用此列,如果我先按null降序检索它将是最有效的。所以我想我有两个问题:

  1. 以什么顺序存储在非聚集索引中?在ASC索引中是空的,在DESC索引中是最后的吗?我有一个同事,似乎认为在这两种情况下都存储了null。他还提到在版本sql server版本中处理null的方式不同。
  2. 有没有办法在非聚集索引中强制首先使用null?这有点依赖于问题1的答案,但是为了论证,我们可以说索引是按照ASC顺序中第一个为零的顺序处理的。有没有办法创建一个非聚集索引,以降序存储值,但首先是null?

1 个答案:

答案 0 :(得分:2)

测试非常简单。以下查询中哪一行为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