Devo ricostruire l'indice dopo troncare / inserimento di grandi dimensioni?


10

Ho una procedura memorizzata che tronca alcune tabelle con circa 1,75 M di righe in ciascuna, prima di inserire nuovi dati (basati su dati in altre tabelle, calcoli ecc.)

Lo schema di base è molto semplice:

  • Tronca le tabelle
  • Inserire 1,75 milioni di righe in "lotti" di circa 75.000 alla volta.

Mi chiedo se dovrei ricostruire esplicitamente gli indici in qualsiasi momento in questo processo? per esempio

  • Tronca le tabelle
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [o qualcosa di simile]
  • Inserisci righe da 1,75 milioni

o forse

  • ALTER INDEX ALL ON xxx DISABLE
  • Tronca le tabelle
  • Inserisci righe da 1,75 milioni
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [o qualcosa di simile]

Qualunque assistenza è stata apprezzata ... non un DBA - un Dev che conosce abbastanza bene DB è più preciso!


Qualche informazione in più sulla struttura della tabella, sugli indici esistenti oggi e sull'aspetto dei dati che vengono inseriti (è in un certo ordine? Si allinea con l'indice cluster?) Aiuterebbe. Suppongo anche che questa tabella non sia disponibile fino a quando questo processo non viene completato? È bene sapere di avere opzioni per l'importazione in blocco.
Mike Walsh,

Forse dovresti troncare l'inserimento della tabella in esso e dare un'occhiata alla frammentazione dell'indice per vedere se è necessario o meno.
Zane,

v: standard 2008. I dati di origine sono più tabelle di staging, prima che questi vengano caricati da CSV, Excel, Oracle e altri database SQL. Le strutture delle tabelle sono tutte identiche in questa fase: 6 caratteri ID, 3 codici carattere, 10 caratteri decimali (20,5). La chiave primaria è ID + codice. I dati vengono caricati attraverso insert intoe al momento non esiste una order byclausola, ma potrei aggiungerlo se potesse aiutare? ID e codice sono anche indicizzati separatamente.
BlueChippy il

Risposte:


6

Come con la maggior parte delle domande di questo tipo, dipende. È improbabile che inserirai i dati nell'ordine "corretto" per tutti gli indici coinvolti, il che significa che è probabile che tutti questi indici incontrino molte divisioni di pagina durante il processo di inserimento. Supponiamo quindi che tu stia inserendo in ordine di indice cluster. È possibile disabilitare tutti gli indici non cluster, troncare, eseguire l'inserimento e quindi ricostruire tutti gli indici non cluster. Certo, provare entrambi gli approcci ti dirà la verità di quale è più veloce indipendentemente dalla teoria alla base. :)


1

Plan Basic con tutti gli indici abilitati potrebbe essere lento e causare frammentazione.

ALTER INDEX REBUILD su una tabella troncata e quindi vuota non serve a nulla, quindi è necessario modificare il piano A. Dovrebbe essere:

  • TRONCARE
  • Inserire
  • RICOSTRUITO ALTER INDEX

Potrebbe essere lento, ma almeno ottieni indici nitidi.

Il piano B va bene. Prova tutti e tre e vedi quale è il più veloce e quale dà la minima frammentazione dell'indice. Quindi decidere se vale la pena ricostruire.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.