Contro:
1. Produrrà letture sporche
2. Applicabile solo a istruzioni di query selezionate
Pro:
1. Alcuni file indicano che l'efficienza delle query SQL con WITH (NOLOCK) può essere aumentata del 33%.
2. Può essere usato per istruzioni interne join
Lettura sporca: Un utente modifica una risorsa, e un altro utente legge il record modificato, poi il primo utente rinuncia alla modifica e i dati tornano alla modifica precedente; questi due risultati diversi sono letture sporche.
Dettagli:
Per migliorare le prestazioni delle query SQL, in generale, la prima considerazione è creare un indice. Infatti, oltre all'istituzione degli indici, quando inseriamo comandi SQL, aggiungere una sezione WITH (NOLOCK) alla sintassi può migliorare il fenomeno dei dataset LOCKATI in un ambiente con un gran numero di query online, migliorando così le prestazioni delle query.
Tuttavia, una cosa da notare è che SQL SELECT con (NOLOCK) può causare lettura sporca.
Per esempio:
Oltre al semplice SELECT, puoi anche usare la sintassi SELECT con JOIN. Ma DELETE, INSERT, UPDATE e altri comandi che richiedono transazioni non sono buoni...
Alcuni file indicano che l'efficienza delle query SQL può essere aumentata del 33% con WITH (NOLOCK). Aggiungendo WITH (NOLOCK) SQL Server si dice che il nostro comando SELECT non deve considerare lo stato del blocco delle transazioni della tabella corrente, quindi le prestazioni miglioreranno significativamente e il fenomeno del lock del sistema di database sarà notevolmente ridotto (incluso il deadlock).
Una cosa da notare è che, poiché WITH (NOLOCK) non tiene conto del blocco delle transazioni della tabella corrente, quindi quando ci sono dati in più fasi (ad esempio transazioni su più tabelle - >ad esempio sistemi di prelievo), WITH (NOLOCK) ignora i dati che stanno attualmente elaborando il processo di transazione...
Per dirla in modo diretto, cioè, quando si usa NoLock, è possibile leggere dati modificati ma la transazione non è ancora stata completata. Pertanto, se devi considerare l'integrità in tempo reale dei dati delle transazioni, dovresti pensare attentamente all'uso di WITH (NOLOCK).
Se non devi considerare le transazioni, WITH (NOLOCK) potrebbe essere un riferimento utile.
Nota 1: CON ( < table_hint > ) Specifica la scansione della tabella, uno o più indici utilizzati dall'ottimizzatore delle query, Oppure tramite l'ottimizzatore di query per sfruttare questa tabella dati e usare la modalità lock per questa istruzione.
Nota 2: WITH (NOLOCK) equivale a READ UNCOMMITTED
|