首页>Database>source

我有一个100,000名玩家的高分榜,每天插入2次,每位玩家一张.在一天结束时,该表中索引的索引碎片为99%.有没有办法通过调整设置来阻止这种情况?

CREATE TABLE HighScore(
    [id] [int] IDENTITY(1,1) NOT NULL,
    [user] [int] NULL,
    [player] [int] NULL,
    [round] [tinyint] NULL,
    [group] [int] NULL,
    [rank] [int] NULL,
    [delta] [int] NULL,
    [roundpoints] [int] NULL,
    [totalpoints] [int] NULL,
PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]

CREATE NONCLUSTERED INDEX [HighScore_RoundGroup_Nidx] ON .[HighScore] 
(
    [round] ASC,
    [group] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO
最新回答
  • 2019-8-27
    1 #

    我认为你应该尝试更高的 FILLFACTOR   HighScore_RoundGroup_Nidx上的设置   (例如50或40).你可以设置 FILLFACTOR   PRIMARY KEY为0或100   因为它不应该碎片如果它仍然存在, FILLFACTOR   没有帮助,因为原因是新分配的页面与其他新分配的页面交错.这是一个众所周知的SQL Server问题.您可以将此索引移动到自己的文件组中,这将阻止此问题。

  • 2019-8-27
    2 #

    也许您认为您正在重建但索引不会重建,因为索引不够大。

    看看这个问题 为什么索引REBUILD不会减少索引碎片化?

    重建后你检查了碎片吗? 它实际上是碎片整理。

  • performance:是否在SQL Server数据库的文件中使用空间而不会对IO产生负面影响?
  • 如何为查询构建器项目设计数据库?