我们运行的SQL Server数据库由于某种原因遇到大量索引碎片(高达85%或更高),我们发现自己几乎每天都在重建索引以阻止这种情况。
我们不知道为什么会发生这种情况。这些表使用newsequentialid()来生成新的GUID(主键),所以我们认为应该总是在最后添加新的行,但我们觉得这不是可能导致高碎片率的情况?
有没有人有任何想法,我们可以尝试缓解这个问题或进一步诊断它?
示例表将是:
CREATE TABLE [dbo].[EmailMessages](
[Id] [uniqueidentifier] NOT NULL,
[Name] [nvarchar](max) NULL
CONSTRAINT [PK_dbo.EmailMessages] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[EmailMessages] ADD CONSTRAINT [DF__EmailMessage__Id__7993056A] DEFAULT (newsequentialid()) FOR [Id]
GO