Fattore di riempimento

La possibilità di scegliere un fattore di riempimento consente di ottimizzare l'archiviazione dei dati dell'indice e le prestazioni. Quando si crea o ricostruisce un indice, il valore del fattore di riempimento determina la percentuale di spazio in ogni pagina di livello foglia da riempire con dati, riservando pertanto una percentuale di spazio libero per l'aumento delle dimensioni successivo. Se ad esempio si specifica un fattore di riempimento pari a 80, il 20% di ogni pagina di livello foglia verrà mantenuto vuoto per garantire lo spazio necessario per l'espansione dell'indice a mano a mano che vengono aggiunti nuovi dati alla tabella sottostante. Lo spazio vuoto viene riservato tra le righe di indice in ogni pagina anziché alla fine della pagina.

Il valore del fattore di riempimento è una percentuale compresa tra 1 e 100. Nella maggior parte dei casi, l'impostazione predefinita di 0 valida per l'intero server rappresenta la scelta ottimale. Quando il fattore di riempimento è impostato su 0, il livello foglia viene riempito fino alla capacità massima.

[!NOTA] I valori 0 e 100 sono equivalenti.

È possibile utilizzare l'istruzione CREATE INDEX o ALTER INDEX per impostare il valore del fattore di riempimento per singoli indici. Per modificare il valore predefinito per l'intero server, utilizzare la stored procedure di sistema sp_configure. Per visualizzare il valore del fattore di riempimento per uno o più indici, utilizzare la vista del catalogo sys.indexes.

ms177459.note(it-it,SQL.90).gifImportante:
L'impostazione del fattore di riempimento è valida solo durante la creazione o la ricostruzione dell'indice. In Motore di database di SQL Server 2005 la percentuale specificata di spazio vuoto delle pagine non viene mantenuta in modo dinamico. Se si tenta di mantenere lo spazio aggiuntivo nelle pagine di dati, si vanificano i motivi iniziali per cui è stato utilizzato il fattore di riempimento, in quanto Motore di database dovrà eseguire suddivisioni di pagina per mantenere la percentuale di spazio libero specificata dal fattore di riempimento in ogni pagina quando vengono immessi i dati.

Considerazioni sulle prestazioni

Divisioni di pagina

Una scelta corretta per il valore del fattore di riempimento può ridurre il rischio che si ottengano divisioni di pagina assicurando spazio sufficiente per l'espansione dell'indice quando vengono aggiunti nuovi dati alla tabella sottostante.

Quando viene aggiunta una nuova riga a una pagina di indice completa, tramite Motore di database circa la metà delle righe viene spostata in una nuova pagina per consentire l'inserimento della nuova riga. Questa riorganizzazione è denominata divisione di pagina. Una divisione di pagina consente di creare spazio per nuovi record, ma può richiedere una certa quantità di tempo e un elevato utilizzo di risorse. Può inoltre provocare la frammentazione, che a sua volta causa l'aumento delle operazioni di I/O. Quando si verificano frequenti divisioni di pagina, l'indice può essere ricostruito utilizzando un valore nuovo o esistente per il fattore di riempimento per ridistribuire i dati. Per ulteriori informazioni, vedere Riorganizzazione e ricostruzione degli indici.

Benché un valore basso, diverso da 0, può ridurre la necessità di dividere le pagine con l'aumentare delle dimensioni dell'indice, l'indice richiede spazio di archiviazione maggiore e può influire negativamente sulle prestazioni di lettura. Anche in un'applicazione progettata per il supporto di numerose operazioni di inserimento e aggiornamento, il numero di letture nel database corrisponde in genere al doppio delle scritture. Pertanto, se si specifica un fattore di riempimento diverso da quello predefinito, è possibile che le prestazioni di lettura del database risultino ridotte in misura inversamente proporzionale all'impostazione del fattore di riempimento. Un fattore di riempimento del 50%, ad esempio, può dimezzare le prestazioni di lettura del database. Le prestazioni di lettura risultano ridotte in quanto l'indice include più pagine, aumentando pertanto le operazioni di I/O su disco necessarie per recuperare i dati.

Aggiunta di dati alla fine della tabella

Un fattore di riempimento diverso da zero può consentire di ottenere prestazioni migliori se i nuovi dati vengono distribuiti in modo uniforme in tutta la tabella. Se tutti i dati vengono invece aggiunti alla fine della tabella, lo spazio vuoto non verrà riempito. Ad esempio, se la colonna chiave dell'indice è una colonna di identità, la chiave per le nuove righe verrà sempre incrementata e le colonne verranno aggiunge logicamente alla fine della tabella. In questo caso, le divisioni di pagina non determineranno una riduzione delle prestazioni. Affinché il livello foglia venga riempito, è necessario utilizzare il fattore di riempimento predefinito di 0 oppure specificare un fattore di riempimento di 100.

Vedere anche

Concetti

Creazione di indici (Motore di database)
Opzione fill factor

Altre risorse

ALTER INDEX (Transact-SQL)
CREATE INDEX (Transact-SQL)
sys.indexes (Transact-SQL)
sp_configure (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005