我有一个SQL Server 2014表,如下所示:
OrderId int not null IDENTITY --this is the primary key column
OrderDate datetime2 not null
CustomerId int not null
Description nvarchar(255) null
Run Code Online (Sandbox Code Playgroud)
我团队中的一些人建议聚集索引应该在OrderId,但我认为CustomerId+OrderId将是更好的选择,原因如下:
WHERE CustomerId = @param,而不是OrderIdCustomerId是Customer表的外键,因此使用聚集索引CustomerId应该会加快连接速度CustomerId不是唯一的,但OrderId在索引中指定额外的列将确保唯一性(我们可以UNIQUE在这两列上创建聚集索引时使用关键字,以避免没有唯一性的开销)CustomerId并且OrderId永远不会改变,所以这些行在初始写入后不会移动。CustomerId进来时,聚集索引将能够提供所有列而无需任何额外工作。是否CustomerId和OrderId做法的声音是最好的选择给出了上述?或者,OrderId它本身更好,因为它是一个单独的列,它本身就保证了唯一性?
目前,该表在 上有一个聚集索引,在 上有一个OrderId非聚集索引CustomerId,但它没有覆盖,所以由于我们使用的是 ORM …