Günlük% 99 dizin indekslenmesi nasıl önlenir


11

100.000 oyuncu için yüksek puanlı bir masam var, bu da günde 2 kez oyuncu başına bir rekorla giriyor. Günün sonunda, bu tablodaki dizinler için dizin parçalanması% 99'dur. Ayarları değiştirerek bunu önlemenin bir yolu var mı?

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
Aptalca bir soru, ama tüm temelleri kapsamak için - her gün yeniden inşa ediyor / yeniden düzenliyor musunuz?
JHFB

TABLO DDL olmadan herkes gönderi tahmin eder. Birincil anahtar olarak GUID mi kullanıyorsunuz?
SQL Öğrenci

Şu anda her gün yeniden inşa ediyorum, ancak verinin nasıl geliştiğini oldukça iyi tahmin edebildiğim için bunun her gün olmasını önlemek isteyip istemediğimi merak ediyorum.
olle

1
Parçalanma seviyesini nasıl belirliyorsunuz? Kümelenmiş dizin için çok fazla mantıklı parçalanma beklemiyordum. Bazı iç parçalanmalar, FILLFACTOR = 80orada ihtiyacınız yok. Sadece yer israf edecek. Tüm sütunlar sabit uzunluktadır, böylece güncelleme sırasında bir satır genişleyemez ve tablonun ortasında ekler olamaz. % 99 diğer endeks için de beklenmedik bir şekilde yüksek görünüyor. Her dizinde kaç sayfa var?
Martin Smith

Her gün yeniden inşa ettikten sonra% 99 gerçekten biraz gidiyor, sys.dm_db_index_physical_statsçıktılarınızı gösterebilir misiniz ?
Martin Smith

Yanıtlar:


3

Daha yüksek FILLFACTORayarları denemeniz gerektiğini düşünüyorum HighScore_RoundGroup_Nidx(örneğin 50 veya 40). Parçalanmaması gerektiği FILLFACTORiçin 0 veya 100 olarak ayarlayabilirsiniz . PRIMARY KEYHala bölünmezse, FILLFACTORyardımcı olmaz çünkü yeni atanan sayfalar yeni atanan diğer sayfalarla serpiştirilir. Bu iyi bilinen bir SQL Server sorunudur. Bu dizini, bu sorunu durduracak olan kendi dosya grubuna taşıyabilirsiniz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.