Ich habe eine Protokollierungstabelle mit ca. 1.500.000 Zeilen, der Primärschlüssel ist eine aufsteigende Identität und der Clustered-Index befindet sich auf dem Primärschlüssel. Der Identitätswert wird automatisch generiert => Datensätze werden immer am Ende hinzugefügt. Die durchschnittliche Zeilengröße beträgt 1570 Byte.
Es gibt viele Seitenteile, da häufig neue Zeilen hinzugefügt werden. Keine Zeilen werden aktualisiert / gelöscht und es gibt einen nicht gruppierten Index für die Tabelle, sodass Zeilen ausgewählt werden können. Aufgrund der Seitenteilung ist der Clustered-Index immer zu> 65% fragmentiert.
Ich frage mich, ob meine Tabelle davon profitieren würde, den Clustered-Index zu entfernen und daraus eine Heap-Tabelle zu machen.
So sieht meine Tabelle + nicht gruppierter Index aus:
CREATE TABLE [dbo].[LogEntry](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Application] [varchar](20) NOT NULL,
[EntityFullName] [varchar](80) NOT NULL,
[Action] [int] NOT NULL,
[UserName] [varchar](25) NOT NULL,
[TimeStamp] [datetime] NOT NULL,
[EntityId] [varchar](50) NOT NULL,
[WhatChanged] [nvarchar](max) NULL,
CONSTRAINT [PK_LogEntry] 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 = 100) ON [PRIMARY] )
ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE NONCLUSTERED INDEX [ID_Application_Entity_FullName_TimeStamp] ON [dbo].[LogEntry]
(
[Application] ASC,
[EntityFullName] ASC,
[TimeStamp] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = OFF) ON [PRIMARY]
GO
Update: Jemand hat das automatische Schrumpfen hinter meinem Rücken aktiviert => Dies ist die Ursache für die Fragmentierung