Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > SQL Server

Respuesta
 
Herramientas Desplegado
Antiguo 13-may-2008, 02:59   #1 (permalink)
Beatrice ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2008
Mensajes: 19
Cursor o T-Sql

Hola a todos!!

Llevo poco tiempo utilizando procedimientos almacenados y necesito hacer una consulta bastante complicada en la que primero recupero una serie de datos y posteriormente recupero otros datos que dependen de unas fechas recuperadas en los datos que he traido inicialmente.

De momento no he utlizado ni cursores. El esquema de mi primera solucion ha sido este:

SELECT dato1, dato2, ...
FROM
(
SELECT
ROW_NUMBER() OVER (ORDER BY Columna ASC) AS numFila,
dato1, dato2,...
FROM
(
/*Al ejecutarse esta parte ya tengo los datos iniciales con sus fechas con las que obtendré el resto de datos que obtendre en TABLA4*/
SELECT datox,datoy....
FROM
(
SELECT datoxx,...
FROM ..... (AQUI HAY VARIOS JOIN)
WHERE ......
)as Tabla1
FULL OUTER JOIN
(
SELECT datox2,datoy2....
FROM
(
SELECT datoxx,...
FROM ..... (AQUI HAY VARIOS JOIN)
WHERE ......
)as Tabla2
on Tabla1.datox = Tabla2.datox2
) AS TABLA3
- Aqui tambien hay varios join -
WHERE
- criterios de seleccion-
GROUP BY .....
)
AS TABLA4
WHERE numFila BETWEEN @startRowIndex and @maximumRows


¿Creeis que es mas eficiente la consulta de esta manera o sería mas optima utilizando cursores?

El volumen de registros que tengo que taer puede ser bastante alto.

Muchas gracias por opinar!!
:D

Última edición por Beatrice; 13-may-2008 a las 03:17.
Beatrice está desconectado   Responder Citando
Antiguo 13-may-2008, 08:24   #2 (permalink)
flaviovich está en el buen camino
 
Avatar de flaviovich
 
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 1.128
Enviar un mensaje por ICQ a flaviovich Enviar un mensaje por MSN a flaviovich Enviar un mensaje por Skype™ a flaviovich
Re: Cursor o T-Sql

Yo no veo problema. Si te funciona lento podrias usar tablas temporales.
Yo tengo una consulta dinamica de mas de 100 lineas y normal, para que usar cursor?
__________________
Если можешь читать это, то напиши мне..
No repitamos temas, usemos el Motor de busquedas
flaviovich está desconectado   Responder Citando
Antiguo 14-may-2008, 00:29   #3 (permalink)
Beatrice ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2008
Mensajes: 19
Re: Cursor o T-Sql

Gracias!
Probare con tablas temporales.

Saludos!
Beatrice está desconectado   Responder Citando
Antiguo 14-may-2008, 10:56   #4 (permalink)
Beatrice ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2008
Mensajes: 19
Re: Cursor o T-Sql

Hola finalmente lo resolvi utilizando un tabla temporal.
Tardo en traerme 100.000 registros 26 segundos.

Gracias por todo!
Beatrice está desconectado   Responder Citando
Antiguo 14-may-2008, 13:29   #5 (permalink)
flaviovich está en el buen camino
 
Avatar de flaviovich
 
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 1.128
Enviar un mensaje por ICQ a flaviovich Enviar un mensaje por MSN a flaviovich Enviar un mensaje por Skype™ a flaviovich
Re: Cursor o T-Sql

Y antes cuanto tiempo te tomaba?
Por ejemplo, yo tenia una consulta que demoraba 9 minutos, pero esta demora no se debia a la complejidad de esta, sino a la cantidad de transacciones en la BD. Despues de un cambio de servidor y BD ahora la consulta se realiza en menos de 10 segundos.
__________________
Если можешь читать это, то напиши мне..
No repitamos temas, usemos el Motor de busquedas
flaviovich está desconectado   Responder Citando
Antiguo 14-may-2008, 16:42   #6 (permalink)
usuariobaneado sólo puede mejorar
 
Avatar de usuariobaneado
 
Fecha de Ingreso: diciembre-2007
Mensajes: 236
Re: Cursor o T-Sql

Tu servidor era una tortuga, o no era un servidor de bd dedicado. O la arquitectura del servidor es diferente, o las conexiones de red son diferentes... en fin...
__________________
Visita http://www.systecsa.net
El blog http://blog.systecsa.net

Sistemas y Soluciones Tecnológicas
usuariobaneado está desconectado   Responder Citando
Antiguo 16-may-2008, 01:44   #7 (permalink)
Beatrice ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2008
Mensajes: 19
Respuesta: Cursor o T-Sql

Hola!
Al final refine todavia mas la consulta creando índices en mis tablas y en la tabla temporal y he conseguido dejarlo en 12 segundos.
De ahi ya no se que mas hacer, pero nos parece un tiempo aceptable (es el tiempo en el peor de los casos)
flaviovich, mejor ni te cuento lo que me tardaba antes (como dije, no suelo trabajar con consultas ;))
Ciao!!
Beatrice está desconectado   Responder Citando
Antiguo 16-may-2008, 08:06   #8 (permalink)
flaviovich está en el buen camino
 
Avatar de flaviovich
 
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 1.128
Enviar un mensaje por ICQ a flaviovich Enviar un mensaje por MSN a flaviovich Enviar un mensaje por Skype™ a flaviovich
Respuesta: Cursor o T-Sql

Si, olvide mencionar los indices. Creo que tu experiencia podria ayudar a otros.
Si no te molesta cuentanos.
__________________
Если можешь читать это, то напиши мне..
No repitamos temas, usemos el Motor de busquedas
flaviovich está desconectado   Responder Citando
Antiguo 16-may-2008, 11:36   #9 (permalink)
usuariobaneado sólo puede mejorar
 
Avatar de usuariobaneado
 
Fecha de Ingreso: diciembre-2007
Mensajes: 236
Respuesta: Cursor o T-Sql

Claro, yo me estoy adentrando en el campo de los indices, pero solo en teoría, aun nada de práctica
__________________
Visita http://www.systecsa.net
El blog http://blog.systecsa.net

Sistemas y Soluciones Tecnológicas
usuariobaneado está desconectado   Responder Citando
Respuesta
Calificación: Calificación de Tema: 1 votos, 3,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 01:58.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93