1日2回挿入される100.000プレーヤー用のハイスコアテーブルがあり、プレーヤーごとに1つのレコードがあります。1日の終わりに、そのテーブルのインデックスのインデックスの断片化は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
1
ばかげた質問ですが、すべての根拠をカバーするために-あなたは毎日再構築/再編成していますか?
—
JHFB 2012年
TABLE DDLがなければ、誰もが推測するでしょう。GUIDを主キーとして使用していますか?
—
SQL学習者
現在、毎日再構築していますが、データがどのように進化するかをかなりよく予測できるので、これが毎日発生するのを防ぐことができるかどうか疑問に思っています。
—
olle
断片化レベルをどのように決定していますか?クラスタ化インデックスでは、論理的な断片化はそれほど期待されません。いくつかの内部の断片化は、しかし、
—
マーティン・スミス、
FILLFACTOR = 80
そこには必要ありません。スペースを浪費するだけです。すべての列は固定長であるため、更新時に行を拡張したり、テーブルの中央で挿入を行ったりすることはできません。他のインデックスについても、99%は予想外に高いようです。各インデックスには何ページありますか?
毎日再構築した後の99%は実際にうまくいくでしょう。
—
マーティン・スミス
sys.dm_db_index_physical_stats
出力を表示できますか?