Spesso ho bisogno di eseguire query su tabelle di grandi dimensioni che non hanno l'indice giusto. Quindi chiedo al DBA di creare tale indice. La prima cosa che fa è guardare le statistiche della tabella e vedere la dimensione dello spazio dell'indice.
Spesso mi diceva di trovare una soluzione alternativa perché "l'indice è già più grande della tabella". Sente che l'indice deve essere più piccolo dei dati, perché mi ha detto "hai mai visto l'indice in un libro? È molto più piccolo del libro stesso, ed è così che dovrebbe essere un indice di tabella".
Non credo che la sua filosofia sia corretta, ma non posso sfidarlo perché è un DBA principale e sono uno sviluppatore. Sento che se una query necessita di un indice, l'indice dovrebbe essere appena creato, invece di trovare "soluzioni alternative" che rendono SP illeggibili e non mantenibili.
Sto selezionando solo le colonne richieste. Il problema è che sto filtrando per data, quindi il motore eseguirà necessariamente una scansione della tabella per abbinare le colonne. La query viene eseguita una volta al giorno, di notte, per raccogliere statistiche, ma sono necessari 15 minuti per l'esecuzione (abbiamo un'altra regola rigida e veloce: nessuna procedura dovrebbe richiedere più di 3 minuti).
Il DBA mi ha mostrato le statistiche dell'indice. C'erano circa 10 indici su quella tabella, di cui solo 6 erano usati (le statistiche mostravano zero hit a 4 di essi). Questo è un grande sistema con oltre 20 sviluppatori partecipanti. Gli indici sono stati creati per qualsiasi motivo e probabilmente non vengono più utilizzati.
Siamo tenuti a supportare SQL Server 2008, poiché è quello su cui vengono eseguiti i DB di test. Ma i clienti sono tutti sul 2014 e 2016.