Solía ver a mis desarrolladores senior usar WITH (NOLOCK) cuando consultaban en SQL Server y me preguntaba por qué lo usan. Ahora lo he explorado y he comprobado que es útil para mejorar el rendimiento en la ejecución de la consulta. Sin embargo, hay una desventaja al usarla. La desventaja es que uno puede no estar seguro de que está recibiendo los datos que se están actualizando actualmente en la Tabla, es decir, sin protección contra bloqueo, no se puede garantizar que los datos no lo estén Cambiando durante el tiempo que la consulta está en ejecución. He consultado este enlace y me ha resultado bastante útil.
Para mejorar el rendimiento de las consultas SQL, en términos generales, la primera consideración es crear un índice. De hecho, además del establecimiento de índices, cuando colocamos comandos SQL, añadir una sección WITH (NOLOCK) a la sintaxis puede mejorar el fenómeno de que los conjuntos de datos estén bloqueados en un entorno con un gran número de consultas en línea, mejorando así el rendimiento de las consultas.
Sin embargo, hay que tener en cuenta que SQL SELECT con (NOLOCK) puede causar una lectura sucia.
Por ejemplo:
Porque SQL Server realiza la comprobación de consistencia correspondiente de los bloqueos. Para mejorar el rendimiento general de las consultas de la base de datos, añade WITH (NOLOCK) al final del nombre de la tabla en tu sintaxis SELECT, aunque (NOLOCK) también es aceptable, pero Microsoft sigue recomendando añadir WITH.
Además de la sencilla SELECT, también puedes usar la sintaxis SELECT con JOIN. Pero los comandos ELIMINAR, INSERTAR, ACTUALIZAR y otros comandos que requieren transacciones no son buenos...
Algunos archivos indican que la eficiencia de consultas SQL puede aumentarse en un 33% con WITH (NOLOCK). Añadir WITH (NOLOCK) indica a SQL Server que nuestro comando SELECT no necesita considerar el estado del bloqueo de transacción de la tabla actual, por lo que el rendimiento mejorará significativamente y el fenómeno de bloqueo del sistema de base de datos se reducirá significativamente (incluyendo el bloqueo muerto).
Una cosa a tener en cuenta es que, dado que WITH (NOLOCK) no tiene en cuenta el bloqueo de transacción de la tabla actual, cuando hay datos en múltiples fases de una transacción (por ejemplo, una transacción en varias tablas - > como un sistema de retiro), WITH (NOLOCK) ignorará los datos que están procesando actualmente el proceso de transacción...
Dicho sin rodeos, es decir, al usar NoLock, permite leer datos que han sido modificados pero la transacción aún no se ha completado. Por lo tanto, si necesitas considerar la integridad en tiempo real de los datos de transacciones, deberías pensar bien en usar WITH (NOLOCK).
Si no necesitas considerar las transacciones, WITH (NOLOCK) puede ser una referencia útil.
Nota 1: CON ( < table_hint > ) Especifica el escaneo de tablas, uno o más índices utilizados por el optimizador de consultas, O por el optimizador de consultas para aprovechar esta tabla de datos y usar el modo bloqueo para esta sentencia.
Nota 2: WITH (NOLOCK) es equivalente a READ UNCOMMITTED
Por último, hablemos de algunas pequeñas diferencias entre nolock y with(nolock): 1: Se admiten sinónimos en SQL05, solo con (nolock) son compatibles; 2: con (nolock) se escribe muy fácilmente y luego especifica el índice. Al consultar sentencias entre servidores, no puedes usar con (nolock), solo con nolock Al consultar en el mismo servidor, se pueden usar tanto con (nolock) como con nolock Como qué Código SQL select * from [IP].a.dbo.table1 con (nolock) Esto te pedirá el error select * from a.dbo.table1 con (nolock). Esto funcionará |