LCJ*_*LCJ 2 index sql-server clustered-index
我的系统中有一个名为“Orders”的现有表。OrderID 是这个表中的主键——它是一个聚集索引。我为“OrderCompanyDetails”设计了一个新表,如下所示。它1-to-1
与 Orders 表有关系。在新表中,OrderID 被保留为集群主键。
只有在订单获得批准后,数据才会插入到新表中。因此插入到新表中的 OrderID 可能不是按顺序排列的。OrderID 10 可能会在 OrderID 5 之前插入,具体取决于哪个订单首先被批准。
在 OrderID 上拥有聚集索引有助于我的查询。但是聚集索引位于以随机序列获取数据的列上。这是一个糟糕的索引设计吗?如果是,我是否应该添加一个名为 OrderCompanyDetailID 的新无意义标识列并将其设为聚集索引?
CREATE TABLE [dbo].[Orders]
(
[OrderID] [int] IDENTITY(1,1) NOT NULL,
[OrderType] [char](3) NOT NULL,
[StatusCD] [char](10) NOT NULL,
[CreatedOnDate] [datetime] NOT NULL CONSTRAINT [DF__Orders__CreatedOn] DEFAULT (getdate()),
CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED
(
[OrderID] ASC
)
)
CREATE TABLE [dbo].[OrderCompanyDetails](
[OrderID] [int] NOT NULL,
[POCompanyCD] [char](4) NULL,
[VendorNo] [varchar](9) NULL,
[CreatedOnDate] [datetime] NOT NULL CONSTRAINT [DF_OrderCompanyDetails_CreatedOn] DEFAULT (getdate()),
CONSTRAINT [PK_OrderCompanyDetails] PRIMARY KEY CLUSTERED
(
[OrderID] ASC
)
)
Run Code Online (Sandbox Code Playgroud)
更新
最近阅读文章不断增加的聚集键——聚集索引辩论………….再次!. 里面有评论
请记住——狭窄的、静态的、独特的、不断增加的——通常是代理键而不是自然键。
对聚集索引的建议是它们不断增加或不断减少,但这并不意味着它们必须如此。除非您使用顺序 GUID,否则 GUID 不会增加或减少。大多数人不使用顺序 GUID。
如果您担心分页会影响性能,请在需要分页之前降低填充因子以容纳更多插入。如果 GUID 是聚集索引(我不是说它应该是聚集索引,我是说如果是),那么这也是对 GUID 的建议。请注意降低它的程度,因为它会影响读取性能,这可能对您很重要,因为您提到 OrderID 上的聚集索引有助于您的查询。
归档时间: |
|
查看次数: |
830 次 |
最近记录: |