Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

C'è un grave calo delle prestazioni per l'utilizzo di chiavi esterne in SQL Server?

C'è un piccolo calo delle prestazioni su inserti, aggiornamenti ed eliminazioni perché l'FK deve essere controllato. Per un record individuale questo sarebbe normalmente così lieve da essere impercettibile a meno che non si inizi ad avere un numero ridicolo di FK associati alla tabella (chiaramente ci vuole più tempo per controllare 100 altre tabelle rispetto a 2). Questa è una cosa buona, non negativa, poiché i database senza integrità sono inaffidabili e quindi inutili. Non dovresti barattare l'integrità con la velocità. Il calo delle prestazioni è solitamente compensato dalla migliore capacità di ottimizzare i piani di esecuzione.

Abbiamo un database di medie dimensioni con circa 9 milioni di record e FK ovunque dovrebbero essere e raramente notiamo un calo delle prestazioni (tranne su una tabella mal progettata che ha oltre 100 chiavi esterne, è un po' lento eliminare i record da questo come tutti deve essere verificato). Quasi tutti i dba che conosco che si occupano di database di grandi dimensioni, terabyte e un vero bisogno di prestazioni elevate su set di dati di grandi dimensioni insiste sui vincoli di chiave esterna perché l'integrità è la chiave di qualsiasi database. Se le persone con database di dimensioni terabyte possono permettersi il piccolissimo impatto sulle prestazioni, allora puoi farlo anche tu.

Gli FK non vengono indicizzati automaticamente e se non vengono indicizzati ciò può causare problemi di prestazioni.

Onestamente, prenderei una copia del tuo database, aggiungerei FK correttamente indicizzati e mostrare la differenza di tempo per inserire, eliminare, aggiornare e selezionare da quelle tabelle rispetto allo stesso dal tuo database senza gli FK. Dimostra che non causerai un calo delle prestazioni. Quindi mostra i risultati delle query che mostrano record orfani che non hanno più significato perché la PK a cui sono correlati non esiste più. È particolarmente efficace mostrarlo per le tabelle che contengono informazioni finanziarie ("Abbiamo 2700 ordini che non possiamo associare a un cliente" farà alzare la voce alla direzione e prenderne atto).