Una volta vedevo i miei sviluppatori senior usare WITH (NOLOCK) quando facevano query in SQL Server e mi chiedevo perché usassero. Ora l'ho esplorato e ho scoperto che è utile per migliorare le prestazioni nell'esecuzione della query. Tuttavia, c'è uno svantaggio nell'usarla. Lo svantaggio è che si potrebbe non essere sicuri di ricevere i dati attualmente aggiornati nella Tabella, cioè, senza protezione contro blocchi, non si può essere garantiti che i dati non lo siano Cambia durante il tempo in cui la query è in esecuzione. Ho consultato questo link e l'ho trovato piuttosto utile.
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 una lettura sporca.
Per esempio:
Perché SQL Server esegue il corrispondente controllo di coerenza dei lock. Per migliorare le prestazioni complessive delle query del database, aggiungi WITH (NOLOCK) alla fine del nome della tabella nella sintassi SELECT, anche se (NOLOCK) è accettabile, ma Microsoft consiglia comunque di aggiungere WITH.
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 della transazione della tabella corrente, quindi quando ci sono dati in più fasi di una transazione (ad esempio una transazione su più tabelle - > come un sistema di prelievo), WITH (NOLOCK) ignorerà 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
Infine, parliamo di alcune piccole differenze tra nolock e with(nolock): 1: Sinonimi in SQL05, supportati solo con (nolock); 2: con (nolock) si scrive molto facilmente e poi specifica l'indice. Quando si interrogano le istruzioni tra server, non puoi usare con (nolock), solo con nolock Quando si fa query sullo stesso server, possono essere usati sia con (nolock) che con nolock Come cosa Codice SQL select * da [IP].a.dbo.table1 con (nolock) Questo ti farà sentire l'errore select * da a.dbo.table1 con (nolock). Questo funzionerà |