Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Top1 Vs all data. q debería ser más rápido

Estas en el tema de Top1 Vs all data. q debería ser más rápido en el foro de SQL Server en Foros del Web. Hola, alguien me pudiera explicar por qué está consulta ( SELECT TOP 1 * FROM Tabla where Col1='XXX' and Col2 = 'XXXXXXXXX' order by Fecha ...
  #1 (permalink)  
Antiguo 03/09/2012, 11:55
 
Fecha de Ingreso: diciembre-2011
Mensajes: 77
Antigüedad: 12 años, 10 meses
Puntos: 2
Top1 Vs all data. q debería ser más rápido

Hola, alguien me pudiera explicar por qué está consulta
(SELECT TOP 1 *
FROM Tabla
where
Col1='XXX' and Col2 = 'XXXXXXXXX'
order by Fecha desc

)
se demora, mientras q sin el "TOP 1"
(SELECT *
FROM Tabla
where
Col1='XXX' and Col2 = 'XXXXXXXXX'
order by Fecha desc

)
no se demora a pesar de ser + de 10.000 resultados?

la estructura de la tabla es la siguiente:

[Fecha] [datetime] NOT NULL,
[Col1] [varchar](8) NOT NULL,
[Col2] [varchar](15) NOT NULL,
[Col3] [float] NOT NULL,
[Col4] [int] NOT NULL,
[Col5] [int] NOT NULL

Gracias!
  #2 (permalink)  
Antiguo 03/09/2012, 13:28
Avatar de Missi  
Fecha de Ingreso: agosto-2011
Mensajes: 391
Antigüedad: 13 años, 3 meses
Puntos: 43
Respuesta: Top1 Vs all data. q debería ser más rápido

Tienes creados indices ¿?
  #3 (permalink)  
Antiguo 03/09/2012, 13:57
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Top1 Vs all data. q debería ser más rápido

Ya revisaste el plan de ejecucion de ambos querys
__________________
MCTS Isaias Islas
  #4 (permalink)  
Antiguo 03/09/2012, 14:13
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Top1 Vs all data. q debería ser más rápido

Hola ericklanford:

Como dijo iislas, revisa el plan de ejecución y postea lo que te esté indicando... por el hecho que estés colocando la consulta entre paréntesis, podría suponer que es parte de una consulta más grande, si es así postea la consulta completa, es posible que la diferencia en tiempos no radique en esta consulta en particular, sino por todo el contexto.

Y no repitas Post's, por favor.

Saludos
Leo.
  #5 (permalink)  
Antiguo 03/09/2012, 14:53
 
Fecha de Ingreso: diciembre-2011
Mensajes: 77
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Top1 Vs all data. q debería ser más rápido

Hola amigos, la consulta aunque la encerré entre paréntesis no forma parte de ninguna otra. Es simplemente una consulta q necesito hacer desde c# a una Tabla q tiene no menos de 40 millones de registros. Probé ejecutarla desde el SQL y efectivamente comprobé q sin el Top 1 demora al rededor de 2s y de lo contrario 30s. Además, esto no sucede si elimino la sentencia WHERE. Por si tiene q ver, la llave de la tabla es (Fecha,Col1,Col2).

Gracias de antemano por sus respuestas.
  #6 (permalink)  
Antiguo 03/09/2012, 15:21
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Top1 Vs all data. q debería ser más rápido

El TOP 1, solo te traera, UN SOLO REGISTRO, es claro que si le quitas el TOP, pues se tardara mas en base a la aplicacion de tu filtro (WHERE).
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 03/09/2012, 16:14
 
Fecha de Ingreso: diciembre-2011
Mensajes: 77
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Top1 Vs all data. q debería ser más rápido

iislas, efectivamente es lógico q utilizando TOP 1 se demore menos, pero en la REALIDAD no está pasando esto.

Revisando los plan de ejecucion de ambas consultas me percaté de una cosa curiosa.

en la consulta sin top 1 se filtran los elementos sin ORDENARLOS todos, y luego se ordenan
cuando ejecuto Top 1 se Ordenan TODO y luego se filtra.

(*puede ser q no haya interpretado bien el plan de ejecución)

Además, prové con esta consulta:

select top 1 * from
(SELECT * FROM Tabla
where
Col1='XXX' and Col2 = 'XXXXXXXX'
) A
order by Fecha desc


y se demora relativamente igual a seleccionarlos sin TOP 1

me puedes explicar pq.
Como debería programar mis consultas en lo adelante teniendo en cuenta este inconveniente?
  #8 (permalink)  
Antiguo 04/09/2012, 08:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Top1 Vs all data. q debería ser más rápido

ya revisaste el plan de ejecucion(ctrl+L) desde el manejador de sql server
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 04/09/2012, 14:40
 
Fecha de Ingreso: diciembre-2011
Mensajes: 77
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Top1 Vs all data. q debería ser más rápido

Efectivamente Libras, ya revisé el plan de ejecución, de hecho lo comentaba en el post anterior.

El tema es:
ya sé q SQL ejecuta más rápido esta consulta:

select top 1 * from
(SELECT * FROM Tabla
where
Col1='XXX' and Col2 = 'XXXXXXXX'
) A
order by Fecha desc


sin embargo, esta otra devuelve el mismo resultado y se demora mucho más:

SELECT TOP 1 *
FROM Tabla
where
Col1='XXX' and Col2 = 'XXXXXXXXX'
order by Fecha desc


COMO PUEDE SER POSIBLE ESTO?
  #10 (permalink)  
Antiguo 04/09/2012, 15:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Top1 Vs all data. q debería ser más rápido

puedes poner el plan de ejecucion en modo texto para analizarlo :)

Código SQL:
Ver original
  1. SET SHOWPLAN_TEXT ON
  2. GO
  3. SELECT top 1 * FROM
  4. (
  5. SELECT * FROM t_asset_audit_trail
  6. ) a ORDER BY actionid
  7.   |--Top(TOP EXPRESSION:((1)))
  8.        |--Clustered Index Scan(OBJECT:([esdwh].[dbo].[t_asset_audit_trail].[PK_t_asset_audit_trail]), ORDERED FORWARD)
  9.  
  10. GO
  11. SELECT top 1 * FROM t_asset_audit_trail ORDER BY actionid
  12.   |--Top(TOP EXPRESSION:((1)))
  13.               |--Clustered Index Scan(OBJECT:([esdwh].[dbo].[t_asset_audit_trail].[PK_t_asset_audit_trail]), ORDERED FORWARD)
aqui esta lo que me regresa en una tabla y regresa lo mismo un clustered index scan a ti que te regresa en una y que en otra???

a lo que veo si le mete un sort a tu tabla entonces esta haciendo un table scan no un clustered index right?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: data, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:02.