Rem*_*yth 6 index sql-server clustered-index
如果您的表没有一个或多个用于聚簇索引(稳定、顺序)的良好候选字段,那么在坏字段上设置聚簇索引更好还是让所有表索引都非聚簇更好?什么是经验法则?
更新
根据反馈,这是一个非常具体的示例,可以使问题更加具体。假设我有一个“PlayerStatsView”表,如下所示:
CREATE TABLE [PlayerStatsView](
[PlayerId] [uniqueidentifier] NOT NULL,
[TeamId] [uniqueidentifier] NOT NULL,
[FirstName] [nvarchar](255) NOT NULL,
[LastName] [nvarchar](255) NOT NULL,
[Status] [nvarchar](255) NOT NULL,
[BattingAvg] [int] NOT NULL,
[RBIs] [int] NOT NULL,
[HomeRuns] [int] NOT NULL,
[PercentageOnBase] [int] NOT NULL,
CONSTRAINT [PK_PlayerStatsView] PRIMARY KEY NONCLUSTERED ([PlayerId] ASC)
)
Run Code Online (Sandbox Code Playgroud)
所以更具体的说...
PlayerId(主键)是一个 GUID,TeamId 也是一个 GUID。FirstName 和 LastName 的组合是唯一的(或只是差不多),但远不及顺序,更不用说它们太大而不能同时包含在单个索引中。(出于本练习的目的,假设玩家姓名偶尔会更改 - 不是经常,而是不时更改。)其余字段将随着每次写入而更新。
我将主要通过 PlayerId 和 TeamId 进行查询,我将在每个上都有一个非聚集索引。
该表目前包含数万条记录,最终将达到数十万条。
回到问题:
如果没有聚集索引,我会更好,还是应该添加聚集索引,即使没有真正适合的字段?
1) 如果 PlayerId 被分配了 NEWSEQUENTIALID,您可以将其视为聚集索引。
2) 否则,您可以添加一个 IDENTITY 并使该 IDENTITY 成为集群(可疑的好处,因为所有访问都将通过您已经建立的 PK)。
3)或者您可以将其保留为堆 - 使用适当的非聚集索引。
假设您不能将 uniqueidentifier 更改为 IDENTITY,我的首选顺序是 1、3、2。
你能解释一下为什么你首先使用 uniqueidentifier 吗?- 这可能与此有关。
归档时间: |
|
查看次数: |
1823 次 |
最近记录: |