小编And*_*ndy的帖子

聚集索引选择 - PK 还是 FK?

我有一个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,而不是OrderId
  • CustomerIdCustomer表的外键,因此使用聚集索引CustomerId应该会加快连接速度
  • 虽然CustomerId不是唯一的,但OrderId在索引中指定额外的列将确保唯一性(我们可以UNIQUE在这两列上创建聚集索引时使用关键字,以避免没有唯一性的开销)
  • 一旦数据被插入,CustomerId并且OrderId永远不会改变,所以这些行在初始写入后不会移动。
  • 数据访问通过默认请求所有列的 ORM 进行,因此当基于 的查询CustomerId进来时,聚集索引将能够提供所有列而无需任何额外工作。

是否CustomerIdOrderId做法的声音是最好的选择给出了上述?或者,OrderId它本身更好,因为它是一个单独的列,它本身就保证了唯一性?

目前,该表在 上有一个聚集索引,在 上有一个OrderId非聚集索引CustomerId,但它没有覆盖,所以由于我们使用的是 ORM …

sql-server clustered-index

11
推荐指数
1
解决办法
338
查看次数

标签 统计

clustered-index ×1

sql-server ×1