Eu costumava ver meus desenvolvedores seniores usarem WITH (NOLOCK) ao consultar no SQL Server e me perguntar por que eles usam. Agora eu explorei e descobri que é útil para melhorar o desempenho na execução da consulta. No entanto, há uma desvantagem em usá-la. A desvantagem é que você pode não ter certeza de que está recebendo os dados que estão sendo atualizados na Tabela, ou seja, sem proteção contra bloqueios, não é possível garantir que os dados não estejam mudando durante o tempo em que a consulta está sendo executada. Consultei este link e achei bem útil.
Para melhorar o desempenho das consultas SQL, de modo geral, a primeira consideração é criar um índice. Na verdade, além do estabelecimento de índices, quando colocamos comandos SQL, adicionar uma seção WITH (NOLOCK) à sintaxe pode melhorar o fenômeno de conjuntos de dados sendo BLOQUEADOS em um ambiente com grande número de consultas online, melhorando assim o desempenho das consultas.
No entanto, uma coisa a notar é que o SQL SELECT com (NOLOCK) pode causar uma leitura suja.
Por exemplo:
Porque o SQL Server realiza a verificação correspondente de consistência de bloqueios. Para melhorar o desempenho geral da consulta ao banco de dados, adicione WITH (NOLOCK) ao final do nome da tabela na sua sintaxe SELECT, embora (NOLOCK) também seja aceitável, mas a Microsoft ainda recomenda adicionar WITH.
Além do simples SELECT, você também pode usar a sintaxe SELECT com JOIN. Mas DELETE, INSERT, UPDATE e outros comandos que exigem transações não são bons...
Alguns arquivos dizem que a eficiência das consultas SQL pode ser aumentada em 33% com WITH (NOLOCK). Adicionar WITH (NOLOCK) informa ao SQL Server que nosso comando SELECT não precisa considerar o estado do bloqueio de transação da tabela atual, então o desempenho será significativamente melhorado, e o fenômeno de bloqueio do sistema de banco de dados será significativamente reduzido (incluindo deadlock).
Uma coisa a se notar é que, como WITH (NOLOCK) não leva em conta o bloqueio de transação da tabela atual, então quando há dados em múltiplas fases de uma transação (por exemplo, uma transação entre múltiplas tabelas – > como um sistema de saque), WITH (NOLOCK) ignora os dados que estão processando o processo de transação...
Para ser direto, ou seja, ao usar o NoLock, ele permite ler dados que foram modificados, mas a transação ainda não foi concluída. Portanto, se você precisa considerar a integridade em tempo real dos dados de transação, deve pensar cuidadosamente em usar WITH (NOLOCK).
Se você não precisar considerar transações, WITH (NOLOCK) pode ser uma referência útil.
Nota 1: COM ( < table_hint > ) Especifica a varredura de tabela, um ou mais índices usados pelo otimizador de consultas, Ou pelo otimizador de consultas para aproveitar essa tabela de dados e usar o modo de bloqueio para essa instrução.
Nota 2: WITH (NOLOCK) é equivalente a READ UNCOMMITTED
Por fim, vamos falar sobre algumas pequenas diferenças entre nolock e with(nolock): 1: Sinônimos em SQL05, somente com (nolock) é suportado; 2: com (nolock) é escrito muito facilmente e então especifica o índice. Ao consultar instruções entre servidores, você não pode usar com (nolock), apenas com nolock Ao consultar no mesmo servidor, tanto com (nolock) quanto com nolock podem ser usados Como o quê Código SQL select * from [IP].a.dbo.table1 com (nolock) Isso vai te pedir o erro select * from a.dbo.table1 com (nolock). Isso vai funcionar |