是否有类似聚簇索引的东西可以使用可空列作为索引列的一部分创建?

jon*_*333 0 sql-server sql-server-2008 sql-server-2012

哪里有一个没有主键的大表,在三个字段上有唯一索引,其中两个可以为空.

有很多应用程序代码依赖于值(或非值)NULL意味着什么,所以我们必须保留列的可空值,它们是通常是主键/聚簇索引的关键列.

对于这三个字段,是否有任何可以按索引方式进行的操作?我们刚刚将数据库升级到SQL Server 2012.

即使作为可空列,行也将在这些字段中包含唯一值.

CREATE TABLE [troublesome].[table](
[AId] [int] NOT NULL,
[BNumber] [int] NULL,
[UserId] [uniqueidentifier] NULL,...
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 5

聚簇索引可以具有可为空的键列.首先,删除唯一的非聚集索引,然后:

CREATE UNIQUE CLUSTERED INDEX uq_c_tt
  ON dbo.troublesome_table(AId, BNumber, UserId);
Run Code Online (Sandbox Code Playgroud)

我怀疑你试图创建一个主键,而不是聚集索引?这是一个常见的误解(可能因为每个表只允许一个,默认情况下主键是聚类的)但主键和聚簇索引不是一回事.聚簇索引不必是主键,主键不必聚类.