¿Por qué "SET TRANSACTION ISOLATION LEVEL LEER UNCOMMITTED" devuelve filas en un orden diferente?

Obtengo las filas en un orden diferente cuando uso

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

en mi procedimiento almacenado.

A continuación se muestra la consulta definida en el procedimiento almacenado.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

SELECT   CaseRateDetailId,AmtPerWeek
FROM    CaseRateDetails
WHERE   CaseRateInfoId = @CaseRateInfoId

Devuelve AmtPerWeek así:

10000,15000,5000,20000,25000,..

Cuando ejecuto la misma consulta sin usar

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

declaración devuelve las filas en el orden correcto, es decir 5000,10000,15000,20000,25000,....

Puedo usar el pedido por la cláusula AmtPerWeek en la consulta anterior, pero quiero saber la razón por la que se comporta así. ¿Por qué está cambiando el orden de las filas?

preguntado el 02 de febrero de 12 a las 10:02

No hay correcta orden sin una orden por cláusula. -

No ORDER BY -> no hay un pedido definido, garantizado o implícito - si necesita un pedido, debe tener un ORDER BY - siempre. -

+1 para "pero quiero saber la razón por la que se comporta así". -

1 Respuestas

Debajo NOLOCK or TABLOCK puedes conseguir un escaneo ordenado por asignación que lee las páginas en orden de archivo en lugar de seguir el nivel de hoja de un índice.

No aparece en el plan de ejecución si utiliza o no este método. Sin ORDER BY no se garantiza ningún pedido.

Respondido 02 Feb 12, 14:02

Eso es fascinante, tienes razón, no aparece en el plan de presentación. Eliminé mi respuesta ya que probaste que estaba equivocada. - Ben

@Ben: cuando el plan muestra un escaneo de índice con Ordered:False el motor relacional indica que no le importa en qué orden se devuelven las filas, lo que significa que el motor de almacenamiento considerará esto como una opción preferible para índices> 64 páginas y donde los datos no pueden cambiar (tablock) o el nivel de aislamiento es tal que prefiere la velocidad a cualquier garantía de coherencia. Es mucho más probable que las exploraciones ordenadas por asignación pierdan filas o las lean dos veces en condiciones de modificaciones de datos simultáneas que una exploración ordenada por índice. - Martin Smith

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.