indici Disabilitare è una buona idea quando si tratta di caricare grandi quantità di dati, ma ... il grosso problema è di tipo cluster indici. Se disabiliti un indice cluster, hai disabilitato l'intera tabella.
Diverse opzioni si suggeriscono e nessuna è semplice.
1) Passare attraverso le viste di sistema (sys.indexes), estrarre la tabella e il nome dell'indice, generare ed eseguire SQL dinamico per disabilitare l'indice. Avere una routine di "annullamento" per riattivarli. (Stai attento, si trattava di un indice univoco o di un vincolo univoco?) Questo, purtroppo, funziona solo se non si utilizzano indici cluster. Buona fortuna.
2) Come per 1, ma salta qualsiasi indice cluster. Quando carichi i dati, assicurati che venga caricato in ordine sequenziale (indice cluster), altrimenti avrai tempi di caricamento scadenti e tabelle frammentate. (Se i provider di dati sono come i miei, buona fortuna anche con quello.)
3) Creare tabelle nel database contenente le definizioni degli indici sulle tabelle di "caricamento". Costruisci una routine che scorre su di loro e elimina tutti gli indici (ultimi indici raggruppati). Questo sarà veloce se si tronchiano prima i tavoli. Carica i tuoi dati, quindi esegui il ciclo e ricrea gli indici da zero (prima il cluster). Utilizza il partizionamento delle tabelle per rendere meno orribile il resto del sistema (ad esempio, fai tutto quanto sopra sulle tabelle di "caricamento", quindi usa il cambio di partizione per spostare i dati caricati nelle tue tabelle "live"). Mi ci è voluto poco tempo per costruire un sistema del genere, ma può funzionare e funzionerà.
fonte
2013-08-14 15:56:58
Probabilmente intendevi REBUILD piuttosto che ENABLE? – bogert