Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Efeito da dica NOLOCK em instruções SELECT


1) Sim , selecione com NOLOCK concluirá mais rápido do que uma seleção normal.

2) Sim , selecione com NOLOCK permitirá que outras consultas na tabela afetada sejam concluídas mais rapidamente do que uma seleção normal.

Por que isso aconteceria?

NOLOCK normalmente (dependendo do seu mecanismo de banco de dados) significa me fornecer seus dados, e eu não me importo em que estado eles estão e não me incomodo em mantê-los parados enquanto você lê. É ao mesmo tempo mais rápido, menos intensivo em recursos e muito, muito perigoso.

Você deve ser avisado para nunca fazer uma atualização ou executar qualquer coisa crítica ao sistema, ou onde a exatidão absoluta é necessária usando dados originados de um NOLOCK leitura. É absolutamente possível que esses dados contenham linhas que foram excluídas durante a execução da consulta ou que foram excluídas em outras sessões que ainda não foram finalizadas. É possível que esses dados incluam linhas que foram parcialmente atualizadas. É possível que esses dados contenham registros que violem as restrições de chave estrangeira. É possível que esses dados excluam linhas que foram adicionadas à tabela, mas ainda não foram confirmadas.

Você realmente não tem como saber qual é o estado dos dados.

Se você está tentando obter coisas como uma contagem de linhas ou outros dados de resumo onde alguma margem de erro é aceitável, então NOLOCK é uma boa maneira de aumentar o desempenho dessas consultas e evitar que elas afetem negativamente o desempenho do banco de dados.

Sempre use o NOLOCK indique com muito cuidado e trate todos os dados retornados de forma suspeita.