Me sale un comportamiento extraño del plan de ejecución de SQL Server (2005).sql server: El número estimado de filas está lejos
NombreTabla: REGISTRO
... contiene alrededor de 1000 filas
- int Id
- Nombre varchar (50)
Consulta:
SELECT *
FROM (SELECT ROW_NUMBER() OVER (ORDER BY ID DESC) as Row,
ID, Name
FROM Log) AS LogWithRowNumbers
WHERE Row >= 1
AND Row <= 2
Se estima el num ber de filas devueltas como 9 (aunque es obvio 2 o menos).
Además, la eliminación de la "fila y < = 2" se incrementará el tiempo de ejecución en alrededor de 5. * ("y Fila < = 2" y "y la fila < = 9999999999999" se comportan de la misma)
tengo estadísticas actualizadas Pero aún así, este comportamiento es extraño. Agregar la fila < 99999999999 hará que la consulta se ejecute más rápido? por qué ?
Vamos chicos, es fácilmente reproducible. ¿Dónde están esos genios de DBA cuando los necesitas? – Faruz
@Faruz: No soy un DBA. Pero la consulta funciona más rápido cuando tiene un único criterio sin Y/O (es decir, ROW = 1). ¿Cómo funciona cuando 'ROW = 1 OR ROW = 2' contra el uso de'> = 'y' <= '. ¿Crea algún índice para la tabla 'Log' internamente? – shahkalpesh
Fila = 1 o fila = 2 estimadas 58 filas devueltas ... No crea un índice interno sino que usa el índice PK (ID). – Faruz