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

Effetto dell'hint NOLOCK nelle istruzioni SELECT

1) , a selezionare con NOLOCK completerà più velocemente di una normale selezione.

2) , a selezionare con NOLOCK consentirà ad altre query sulla tabella interessata di completare più velocemente di una normale selezione.

Perché dovrebbe essere questo?

NOLOCK in genere (a seconda del tuo motore DB) significa dammi i tuoi dati e non mi interessa in quale stato si trovi e non mi preoccupo di tenerlo fermo mentre leggi da esso. È tutto allo stesso tempo più veloce, meno dispendioso in termini di risorse e molto molto pericoloso.

Dovresti essere avvisato di non eseguire mai un aggiornamento da o eseguire nulla di critico per il sistema o laddove sia richiesta la correttezza assoluta utilizzando dati originati da un NOLOCK leggere. È assolutamente possibile che questi dati contengano righe che sono state eliminate durante l'esecuzione della query o che sono state eliminate in altre sessioni che devono ancora essere finalizzate. È possibile che questi dati includano righe che sono state parzialmente aggiornate. È possibile che questi dati contengano record che violano i vincoli di chiave esterna. È possibile che questi dati escludano le righe che sono state aggiunte alla tabella ma devono ancora essere salvate.

Non hai davvero modo di sapere qual è lo stato dei dati.

Se stai cercando di ottenere cose come un numero di righe o altri dati di riepilogo in cui un certo margine di errore è accettabile, allora NOLOCK è un buon modo per aumentare le prestazioni di queste query ed evitare che influiscano negativamente sulle prestazioni del database.

Utilizza sempre il NOLOCK suggerisci con grande cautela e tratta i dati che restituisce in modo sospetto.