La contrainte suivante est appliquée à l'une de mes tables, mais je ne sais pas ce que PAD_INDEX signifie.
Est-ce que quelqu'un peut m'éclairer?
CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED
(
[EmployeeId] ASC
) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
^--------------^
this part here
Un index dans SQL Server est un B-Tree
FILLFACTOR s'applique à la couche inférieure
Ceci est le nœud feuille/couche de données dans l'image ci-dessous
PAD_INDEX ON signifie "Appliquer FILLFACTOR à toutes les couches"
Ce sont les niveaux intermédiaires dans l'image ci-dessous (entre racine et données)
Cela signifie que PAD_INDEX n'est utile que si FILLFACTOR est défini. FILLFACTOR détermine combien d’espace libre dans une page de données (environ)
Fondamentalement, vous définissez PAD_INDEX = ON si vous attendez de nombreuses modifications aléatoires de l'index régulièrement.
Cela aide à éviter les fractionnements de pages d'index.
Je l'ai activé lorsque je m'attends à ce que plus de 30% des enregistrements aléatoires inclus dans l'index soient supprimés régulièrement.
De MSDN :
PAD_INDEX = {ON | OFF}
Spécifie le remplissage d'index. La valeur par défaut est OFF.
ON: Le pourcentage d'espace libre spécifié par fillfactor est appliqué aux pages de niveau intermédiaire de l'index.
OFF ou facteur de remplissage n'est pas spécifié: Les pages de niveau intermédiaire sont remplies presque à pleine capacité, laissant un espace suffisant pour au moins une ligne de la taille maximale de l'index, en considérant l'ensemble de clés sur les pages intermédiaires.
L'option PAD_INDEX est utile uniquement lorsque FILLFACTOR est spécifié, car PAD_INDEX utilise le pourcentage spécifié par FILLFACTOR. Si le pourcentage spécifié pour FILLFACTOR n'est pas assez important pour autoriser une ligne, le moteur de base de données remplace en interne le pourcentage afin de permettre le minimum. Le nombre de lignes sur une page d'index intermédiaire n'est jamais inférieur à deux, quelle que soit la valeur de fillfactor.
Avec une syntaxe rétro-compatible, WITH PAD_INDEX est équivalent à WITH PAD_INDEX = ON.
@bielawski Vous décrivez uniquement les cas où PAD_INDEX = ON et FILLFACTOR est compris entre 1 et 99 . Ce que vous envisagez de définir PAD_INDEX = ON et FILLFACTOR = 0 ou 100 si j'insère des lignes ordonnées, qui sont toujours plus récent que le précédent.
CREATE CLUSTERED INDEX [IX_z_Arch_export_dzienny_pre] ON [dbo].[z_Arch_export_daily_pre]
(
[Date] ASC,
[Object Code] ASC,
[From date] ASC,
[Person_role] ASC,
[Departure] ASC,
[Room code] ASC,
[period_7_14] ASC
)WITH (PAD_INDEX = ON, FILLFACTOR=100)
insert into z_Arch_export_daily_pre
select * from export_daily_pre
order by [Date] ASC,[Object Code] ASC,[From date] ASC,[Person_role] ASC,[Departure] ASC,[Room code] ASC,[period_7_14] ASC
J'ai l'assurance à 100% que toutes les nouvelles lignes seront insérées "à la fin" de l'index, et ce n'est qu'avec ces options (PAD_INDEX = ON, FILLFACTOR = 100) que je pourrais atteindre 0,01% de l'indice de fragmentation après l'insertion . dangereux avec ces paramètres avec ces hypothèses?