¿Por qué hacer un top (1) en una columna indexada en SQL Server es lento?
Estoy confundido por lo siguiente. Tengo un DB con alrededor de 10 millones de filas, y (entre otros índices) en 1 columna (campaignid_int) es un índice.
Ahora tengo 700k filas donde el campaignid es de hecho 3835
Para todas estas filas, el id de conexión es el mismo.
Solo quiero descubrir esta conexión.
use messaging_db;
SELECT TOP (1) connectionid
FROM outgoing_messages WITH (NOLOCK)
WHERE (campaignid_int = 3835)
¡Ahora esta consulta tarda aproximadamente 30 segundos en realizarse!
Yo (con mi pequeño conocimiento de db) esperaría que tomara cualquiera de las filas, y me devolvería esa conexión
Si pruebo esta misma consulta para una campaña que solo tiene 1 entrada, va muy rápido. Entonces el índice funciona.
¿Cómo abordaría esto y por qué esto no funciona?
editar:
estimated execution plan:
select (0%) - top (0%) - clustered index scan (100%)