No siempre es malo.
Por supuesto, le permite leer valores no confirmados (que pueden revertirse y, por lo tanto, nunca existieron lógicamente), así como permitir fenómenos como leer valores varias veces o nada.
Los únicos niveles de aislamiento que garantizan que no encontrará tales anomalías son serializables / instantáneas. Los valores de lectura repetibles pueden perderse si se mueve una fila (debido a una actualización de clave) antes de que la exploración llegue a esta fila, los valores confirmados de lectura se pueden leer dos veces si una actualización de clave hace que una fila de lectura anterior avance.
nolock
Sin embargo, es más probable que surjan estos problemas porque, de forma predeterminada, en este nivel de aislamiento utilizará una exploración ordenada por asignación cuando estima que hay más de 64 páginas para leer . Además de la categoría de problemas que surgen cuando las filas se mueven entre páginas debido a actualizaciones de claves de índice, estos escaneos ordenados por asignación también son vulnerables a problemas con divisiones de página (donde las filas pueden perderse si la página recién asignada es anterior en el archivo al punto ya escaneado o leído dos veces si una página ya escaneada se divide en una página posterior en el archivo).
Al menos para consultas simples (tabla única) es posible desalentar el uso de estos escaneos y obtener un escaneo ordenado por clave nolock
simplemente agregando un ORDER BY index_key
a la consulta para que la Ordered
propiedad del IndexScan
es true
.
Pero si su aplicación de informes no necesita cifras absolutamente precisas y puede tolerar la mayor probabilidad de tales inconsistencias, podría ser aceptable.
Pero ciertamente no deberías tirarlo en todas las consultas con la esperanza de que sea un botón mágico "turbo". Además de la mayor probabilidad de encontrar resultados anómalos en ese nivel de aislamiento o ningún resultado en absoluto (error "No se pudo continuar la exploración con NOLOCK debido al movimiento de datos"), incluso hay casos en los que el rendimiento nolock
puede ser mucho peor .