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

Reducir Tiempos en Consulta SQL

Estas en el tema de Reducir Tiempos en Consulta SQL en el foro de SQL Server en Foros del Web. Hola a todos: bueno la verdad es que estoy corriendo una aplicacion que me muestra registros de una BD cualquiera.. el problema es que el ...
  #1 (permalink)  
Antiguo 30/04/2012, 15:59
Avatar de jhodmar  
Fecha de Ingreso: febrero-2012
Ubicación: Medellin
Mensajes: 52
Antigüedad: 12 años, 1 mes
Puntos: 1
Pregunta Reducir Tiempos en Consulta SQL

Hola a todos:

bueno la verdad es que estoy corriendo una aplicacion que me muestra registros de una BD cualquiera.. el problema es que el tiempo de respuesta para mi es muy lento +4 segundos.. como logro reducir esos tiempos... (en total mis tablas tienen 24.024 registros)
antes tenias las consulltas en la aplicacion (.net de VB), las he pasado a procesos almacenado directamente en BD pero no he notado la diferencia!!

alguna sugerencia seria de gran ayuda.. me baso en que pueden ser los ciclos que realizo en una de ellas tengo 3 ciclos consecutivos.... algunos pasos para optimizar mas el tiempo de respuesta???

cualquier sugerencia la tendre en cuenta!!
  #2 (permalink)  
Antiguo 30/04/2012, 16:02
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Reducir Tiempos en Consulta SQL

El tiempo de respuesta de una base de datos estas dada por varios factores:

- procesadores
- memoria
- Ubicacion de la Tempdb
- Fragmentacion de los archivos de la Tempdb
- Indices
- Tamaño del Log
- Codificacion de la query

Incluso, podria incluirse la VERSION-EDICION de SQL Server.

¿Nos puedes dar mas detalles o mostrarnos tu query?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 30/04/2012, 16:46
Avatar de jhodmar  
Fecha de Ingreso: febrero-2012
Ubicación: Medellin
Mensajes: 52
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Reducir Tiempos en Consulta SQL

bueno mi equipo en el cual corro la aplicacion es
SO Win7 Ultimate 32 bits
cpu intel core i3 2,40 GB
memoria ram 4 GB
VB 2010
SQLServer 2008

realizo consultas de Zonas
Cita:
ELSE IF (@Opcion = 2)
SET @sql =
'--Definimos nuestro CTE
WITH Zonas(IdNode, Descripcion,Level, IdPadre)
AS
(
-- Definimos la raíz o miembro anclar
SELECT Id, descripcion , 1 as Level, IdPadre
FROM TBL_VYD_Regiones
WHERE Id = '''+@IdRegionActual+'''
UNION ALL
-- Definimos el miembro recursivo haciendo referencia a nuestro CTE
SELECT n.Id, n.Descripcion , ZR.Level + 1 as Level, n.IdPadre
FROM TBL_VYD_Regiones n
INNER JOIN Zonas ZR on n.IdPadre = ZR.IdNode
)
-- Ahora simplemente consultamos nuestro CTE
SELECT * from Zonas
Order by Level'
fue necesario hacer llamada recursiva pero desde el mismo SQL

luego recorro los resultados
Cita:
IF (@opcion = 1)
SET @sql =
'SELECT SUM(T1.CantidadesTotales) as CantidadTotal
FROM (SELECT (TBL_INV_RemFact_Pedidos.Cantidad) AS CantidadesTotales
FROM TBL_INV_RemFact_Pedidos
INNER JOIN TBL_VYD_DetallesP ON TBL_INV_RemFact_Pedidos.NroPedido = TBL_VYD_DetallesP.NroPedido
INNER JOIN TBL_INV_REMFACT ON TBL_INV_RemFact_Pedidos.IdRF = TBL_INV_REMFACT.idRF
RIGHT OUTER JOIN TBL_VYD_Regiones ON TBL_VYD_DetallesP.id_zona = TBL_VYD_Regiones.id
GROUP BY TBL_VYD_Regiones.id, TBL_INV_RemFact_Pedidos.EstadoFact,
TBL_INV_REMFACT.fechaImpF, TBL_INV_RemFact_Pedidos.Cantidad
HAVING (TBL_VYD_Regiones.id ='''+@IdRegionActual+''')
AND (TBL_INV_REMFACT.fechaImpF
BETWEEN '''+@FechaInicial+''' AND CONVERT(varchar(12), DATEADD(day, 0, GETDATE()), 106))
AND (TBL_INV_RemFact_Pedidos.EstadoFact = ''F'')) as T1'
......
luego lleno mi datagridview
despues de esto me ubico en la primera zona y
ahora realizo clasificacion por productos
que es un segundo grid que tambien va a consultar la BD
primero los grupos
Cita:
ELSE IF (@Opcion = 5)
SET @sql =
'DECLARE @Cadena VARCHAR(1024)
--Definimos nuestro CTE
WITH Items(idNodo, Nombre,Level, IdPadre)
AS
(
-- Definimos la raíz o miembro anclar
SELECT idNodo , Nombre , 1 as Level, IdPadre
FROM TBL_INV_ARBOL
WHERE idNodo = '''+@IdItemsActual+'''
UNION ALL
-- Definimos el miembro recursivo haciendo referencia a nuestro CTE
SELECT AR.idNodo , AR.Nombre , ZR.Level + 1 as Level, AR.IdPadre
FROM TBL_INV_ARBOL AR
INNER JOIN Items ZR on ZR .IdPadre = AR .idNodo-- order by ZR.Level desc
)
--Creamos funcion que nos permita concatenar los nombres!
select @Cadena = Nombre + COALESCE('' - '' + @Cadena,'''')
FROM Items where IdPadre <> ''0''
SELECT Items = @Cadena '
luego de eso por cada grupo de items busco total unidades
dependiendo de la region de la primeras consultas!
Cita:
ELSE IF (@Opcion = 4)
SET @sql =
'select dbo.TBL_INV_ITEM.idNodo, dbo.TBL_INV_RemFact_Pedidos.Referencia,
dbo.TBL_INV_RemFact_Pedidos.Descripcion,
SUM(dbo.TBL_INV_RemFact_Pedidos.Cantidad) AS TotalCantidad
from TBL_INV_RemFact_Pedidos
INNER JOIN TBL_VYD_DetallesP ON TBL_INV_RemFact_Pedidos.NroPedido = TBL_VYD_DetallesP.NroPedido
INNER JOIN TBL_INV_ITEM ON TBL_INV_RemFact_Pedidos.Referencia = TBL_INV_ITEM.Referencia
INNER JOIN TBL_INV_REMFACT ON dbo.TBL_INV_RemFact_Pedidos.IdRF = dbo.TBL_INV_REMFACT.idRF
where (TBL_VYD_DetallesP.id_zona = '''+@IdRegionActual+''')
AND (TBL_INV_REMFACT.fechaImpF
BETWEEN '''+@FechaInicial+''' AND CONVERT(varchar(12), DATEADD(day, 0, GETDATE())))
GROUP BY TBL_INV_RemFact_Pedidos.Referencia,
TBL_INV_RemFact_Pedidos.Descripcion, TBL_INV_ITEM.idNodo,
TBL_INV_ITEM.idTipo HAVING (TBL_INV_ITEM.idNodo = '''+@IdItemsActual+''')
AND (dbo.TBL_INV_ITEM.idTipo = ''7'')'
bueno creo que esa son algunas de las cosas que hago para mostrar los registros
despues de eso debo obtener porcentajes por region por producto y porcentaje total
....

Resumen:
busco todas las zonas hijas
recorro zona por zona
sumo los productos que se vendieron en la zonas hijas y la coloco en la zona padre
luego me ubico en una zona padre y busco que productos se vendieron en sus zonas hijos
ahora sumo todos los productos de las zonas hijas
luego de esto por regla de 3 obtengo lso porcentajes individuales de cada zona padre y cada producto
....
bueno creo que eso deberia confundirte mas!!
pero cualquier sugerencia que me reduzca el tiempo la mitad te lo agradeceria enormemente!!!
  #4 (permalink)  
Antiguo 30/04/2012, 18:19
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Reducir Tiempos en Consulta SQL

No entiendo muy bien tu query, pero esto, ¿te funciona?

WHERE Id = '''+@IdRegionActual+'''

¿porque estas concatenando con comitas?
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 01/05/2012, 14:26
Avatar de jhodmar  
Fecha de Ingreso: febrero-2012
Ubicación: Medellin
Mensajes: 52
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Reducir Tiempos en Consulta SQL

de hecho funciona bien.... el proceso corre sin errores
y la forma de hacer eso es por que necesito
WHERE Id = '5'
entonces si paso WHERE Id = '+@IdRegionActual+' no habria tampoco problemas pero lo toma como WHERE Id = 5
pero si ocurre con la fecha que el rango debe estar entre ''

Nota: no existe error de sintaxis el problema es el tiempo de respuesta!!
  #6 (permalink)  
Antiguo 02/05/2012, 08:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Reducir Tiempos en Consulta SQL

ya revisaste tus indices? ya checaste el plan de ejecucion de tu query (ctrl+L)??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 03/05/2012, 14:44
Avatar de jhodmar  
Fecha de Ingreso: febrero-2012
Ubicación: Medellin
Mensajes: 52
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Reducir Tiempos en Consulta SQL

bueno amigos yo he estado trabajando mucho en cuestion de los ciclos.. no se he tratado de globalizar las condiciones para mandar a consultar solo una vez a BD.. pero me queda un sabor agri-dulce ya que no me parece la mejor manera. pero si he logrado disminuir el tiempo de respuesta!
  #8 (permalink)  
Antiguo 04/05/2012, 14:36
Avatar de ingelenalopez  
Fecha de Ingreso: mayo-2012
Ubicación: Santo Domingo, Dominican Republic
Mensajes: 12
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Reducir Tiempos en Consulta SQL

Qué versión de MSSQL estás usando?

Las tablas tienen índices? Prueba utilizando el Database Engine Tunning Advisor
  #9 (permalink)  
Antiguo 07/05/2012, 13:28
Avatar de jhodmar  
Fecha de Ingreso: febrero-2012
Ubicación: Medellin
Mensajes: 52
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Reducir Tiempos en Consulta SQL

bueno la verdad ni idea a lo que te refieras con MSSSQL... estoy trabajando con managent studio 2008, las tablas no tienen indices ya que no soy el encargado de la estructura de la BD ... ademas son muchas BD... y fueron creadas por otras personas :(
  #10 (permalink)  
Antiguo 07/05/2012, 14:38
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Reducir Tiempos en Consulta SQL

Cita:
Iniciado por jhodmar Ver Mensaje
bueno la verdad ni idea a lo que te refieras con MSSSQL... estoy trabajando con managent studio 2008, las tablas no tienen indices ya que no soy el encargado de la estructura de la BD ... ademas son muchas BD... y fueron creadas por otras personas :(
MSSQL=Microsoft Sql Server, Management studio es un componente de Sql server :), indices, sabes que es un indice? no es parte de la estructura ni una llave foranea es para agilizar tus consultas.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: reducir, registro, sql, tabla, almacenar
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 14:15.