Mejora velocidad de consulta

12/12/2003 - 09:03 por Ricardo Uribe | Informe spam
Hola a todos, tengo una tabla que tiene esta cantidad de registros 1'659,744
bueno y tengo esta consulta.

SELECT dbo.Movimientos.NumeroMovimiento, dbo.Movimientos.CodigoArticulo,
dbo.TipoMovimiento.Descripcion, dbo.Movimientos.TipoDocumento,
dbo.Movimientos.NumeroDocumento,
CASE WHEN dbo.Movimientos.TipoMovimiento = 'I' THEN
dbo.Proveedor.Nombre ELSE
(CASE WHEN dbo.Movimientos.TipoMovimiento = 'D' THEN
dbo.Clientes.Nombres ELSE
(CASE WHEN
dbo.Movimientos.TipoMovimiento = 'S' THEN
'ALMACEN' END) END) END AS Origen,
CASE WHEN dbo.Movimientos.TipoMovimiento = 'I' OR
dbo.Movimientos.TipoMovimiento = 'D' THEN
'ALMACEN' ELSE
(CASE WHEN
dbo.Movimientos.TipoMovimiento = 'S' THEN dbo.Clientes.Nombres END)
END AS Destino,

dbo.Movimientos.FechaMovimiento AS Fecha,
CASE WHEN dbo.Movimientos.tipomovimiento = 'S' THEN dbo.Movimientos.cantidad
* (- 1) ELSE dbo.Movimientos.cantidad END AS Cantidad
FROM dbo.Movimientos INNER JOIN
dbo.TipoMovimiento ON dbo.Movimientos.TipoMovimiento dbo.TipoMovimiento.Codigo INNER JOIN
dbo.Documento ON dbo.Movimientos.NumeroDocumento dbo.Documento.NumeroDocumento INNER JOIN
dbo.Clientes ON dbo.Documento.CodigoCliente dbo.Clientes.CodigoCliente INNER JOIN
dbo.Proveedor ON dbo.Documento.CodigoCliente dbo.Proveedor.CodigoProveedor

Despues le aumentos esta linea

ORDER BY dbo.Movimientos.CodigoArticulo

pero me sale que se supero el tiempo de espera, quisiera saber como puedo
aumentar ese tiempo de espera en el Administrador Corporativo o si hay
alguna forma de mejorar la velocidad de mi consulta.

Preguntas similare

Leer las respuestas

#1 Ricardo Uribe
12/12/2003 - 10:34 | Informe spam
Muchas Gracias, voy a probar.

"Maximiliano Damian Accotto" escribió
en el mensaje news:uav$
Bueno vamos paso a paso si?

primero yo no usaria el administrador coorporativo para esto, te aconsejo
que uses el Analizador de Consultas (ahora veras porque)

Pero si no quieres en el administrador cooporativo para cambiar el timeout
has esto:
Ve a Herramientas -- Opciones!! aca apareceran 2 solapas (ve a la segunda


y
fijate que los tiempos esten en 0)

Bien porque usar el analizador de consultas? porque para mi es el mejor


para
ver temas de este tipo, por ej podrias evaluar el plan de ejecucion de tu
consulta y ver si se puede o no optimiar. como tambien por ej usar el
asistente para indices (no emocionarse mucho con esto por favor) y ver que
indices recomienda el sistema para la consulta (esto generalmente optimiza
mucho de verdad)

Bue te envio un saludo enorme


Maximiliano Damian Accotto
"Ricardo Uribe" escribió en el mensaje
news:
> Hola a todos, tengo una tabla que tiene esta cantidad de registros
1'659,744
> bueno y tengo esta consulta.
>
> SELECT dbo.Movimientos.NumeroMovimiento,
dbo.Movimientos.CodigoArticulo,
> dbo.TipoMovimiento.Descripcion, dbo.Movimientos.TipoDocumento,
> dbo.Movimientos.NumeroDocumento,
> CASE WHEN dbo.Movimientos.TipoMovimiento = 'I' THEN
> dbo.Proveedor.Nombre ELSE
> (CASE WHEN dbo.Movimientos.TipoMovimiento = 'D'
THEN
> dbo.Clientes.Nombres ELSE
> (CASE WHEN
> dbo.Movimientos.TipoMovimiento = 'S' THEN
> 'ALMACEN' END) END) END AS


Origen,
> CASE WHEN dbo.Movimientos.TipoMovimiento = 'I' OR
> dbo.Movimientos.TipoMovimiento = 'D' THEN
> 'ALMACEN' ELSE
> (CASE WHEN
> dbo.Movimientos.TipoMovimiento = 'S' THEN dbo.Clientes.Nombres END)
> END AS Destino,
>
> dbo.Movimientos.FechaMovimiento AS Fecha,
> CASE WHEN dbo.Movimientos.tipomovimiento = 'S' THEN
dbo.Movimientos.cantidad
> * (- 1) ELSE dbo.Movimientos.cantidad END AS Cantidad
> FROM dbo.Movimientos INNER JOIN
> dbo.TipoMovimiento ON


dbo.Movimientos.TipoMovimiento
> > dbo.TipoMovimiento.Codigo INNER JOIN
> dbo.Documento ON dbo.Movimientos.NumeroDocumento > > dbo.Documento.NumeroDocumento INNER JOIN
> dbo.Clientes ON dbo.Documento.CodigoCliente > > dbo.Clientes.CodigoCliente INNER JOIN
> dbo.Proveedor ON dbo.Documento.CodigoCliente > > dbo.Proveedor.CodigoProveedor
>
> Despues le aumentos esta linea
>
> ORDER BY dbo.Movimientos.CodigoArticulo
>
> pero me sale que se supero el tiempo de espera, quisiera saber como


puedo
> aumentar ese tiempo de espera en el Administrador Corporativo o si hay
> alguna forma de mejorar la velocidad de mi consulta.
>
>


Respuesta Responder a este mensaje
#2 Maximiliano Damian Accotto
12/12/2003 - 15:16 | Informe spam
Bueno vamos paso a paso si?

primero yo no usaria el administrador coorporativo para esto, te aconsejo
que uses el Analizador de Consultas (ahora veras porque)

Pero si no quieres en el administrador cooporativo para cambiar el timeout
has esto:
Ve a Herramientas -- Opciones!! aca apareceran 2 solapas (ve a la segunda y
fijate que los tiempos esten en 0)

Bien porque usar el analizador de consultas? porque para mi es el mejor para
ver temas de este tipo, por ej podrias evaluar el plan de ejecucion de tu
consulta y ver si se puede o no optimiar. como tambien por ej usar el
asistente para indices (no emocionarse mucho con esto por favor) y ver que
indices recomienda el sistema para la consulta (esto generalmente optimiza
mucho de verdad)

Bue te envio un saludo enorme


Maximiliano Damian Accotto
"Ricardo Uribe" escribió en el mensaje
news:
Hola a todos, tengo una tabla que tiene esta cantidad de registros


1'659,744
bueno y tengo esta consulta.

SELECT dbo.Movimientos.NumeroMovimiento,


dbo.Movimientos.CodigoArticulo,
dbo.TipoMovimiento.Descripcion, dbo.Movimientos.TipoDocumento,
dbo.Movimientos.NumeroDocumento,
CASE WHEN dbo.Movimientos.TipoMovimiento = 'I' THEN
dbo.Proveedor.Nombre ELSE
(CASE WHEN dbo.Movimientos.TipoMovimiento = 'D'


THEN
dbo.Clientes.Nombres ELSE
(CASE WHEN
dbo.Movimientos.TipoMovimiento = 'S' THEN
'ALMACEN' END) END) END AS Origen,
CASE WHEN dbo.Movimientos.TipoMovimiento = 'I' OR
dbo.Movimientos.TipoMovimiento = 'D' THEN
'ALMACEN' ELSE
(CASE WHEN
dbo.Movimientos.TipoMovimiento = 'S' THEN dbo.Clientes.Nombres END)
END AS Destino,

dbo.Movimientos.FechaMovimiento AS Fecha,
CASE WHEN dbo.Movimientos.tipomovimiento = 'S' THEN


dbo.Movimientos.cantidad
* (- 1) ELSE dbo.Movimientos.cantidad END AS Cantidad
FROM dbo.Movimientos INNER JOIN
dbo.TipoMovimiento ON dbo.Movimientos.TipoMovimiento
dbo.TipoMovimiento.Codigo INNER JOIN
dbo.Documento ON dbo.Movimientos.NumeroDocumento > dbo.Documento.NumeroDocumento INNER JOIN
dbo.Clientes ON dbo.Documento.CodigoCliente > dbo.Clientes.CodigoCliente INNER JOIN
dbo.Proveedor ON dbo.Documento.CodigoCliente > dbo.Proveedor.CodigoProveedor

Despues le aumentos esta linea

ORDER BY dbo.Movimientos.CodigoArticulo

pero me sale que se supero el tiempo de espera, quisiera saber como puedo
aumentar ese tiempo de espera en el Administrador Corporativo o si hay
alguna forma de mejorar la velocidad de mi consulta.


Respuesta Responder a este mensaje
#3 Roberto Carlos
12/12/2003 - 16:34 | Informe spam
Trata este código optimizado...


SELECT
dbo.Movimientos.NumeroMovimiento,
dbo.Movimientos.CodigoArticulo,
dbo.TipoMovimiento.Descripcion,
dbo.Movimientos.TipoDocumento,
dbo.Movimientos.NumeroDocumento,
Origen = CASE dbo.Movimientos.TipoMovimiento
WHEN 'I' THEN dbo.Proveedor.Nombre
WHEN 'D' THEN dbo.Clientes.Nombres
WHEN 'S' THEN 'ALMACEN'
END,
Destino = CASE dbo.Movimientos.TipoMovimiento
WHEN 'I' OR 'D' THEN 'ALMACEN'
WHEN 'S' THEN dbo.Clientes.Nombres
END,
dbo.Movimientos.FechaMovimiento AS Fecha,
Cantidad = CASE dbo.Movimientos.tipomovimiento
WHEN 'S' THEN dbo.Movimientos.cantidad * (- 1)
ELSE dbo.Movimientos.cantidad
END
FROM
dbo.Movimientos
INNER JOIN
dbo.TipoMovimiento
ON
dbo.Movimientos.TipoMovimiento = dbo.TipoMovimiento.Codigo
INNER JOIN
dbo.Documento
ON
dbo.Movimientos.NumeroDocumento = dbo.Documento.NumeroDocumento
INNER JOIN
dbo.Clientes
ON
dbo.Documento.CodigoCliente = dbo.Clientes.CodigoCliente
INNER JOIN
dbo.Proveedor
ON
dbo.Documento.CodigoCliente = dbo.Proveedor.CodigoProveedor
ORDER BY
dbo.Movimientos.CodigoArticulo


Sugerencias:
1ero. Este orden esta más congruente y carga menos la consulta.
2do. Tener Indexado los campos del On
dbo.Movimientos.TipoMovimiento
dbo.TipoMovimiento.Codigo
dbo.Movimientos.NumeroDocumento
dbo.Documento.NumeroDocumento
dbo.Documento.CodigoCliente
dbo.Clientes.CodigoCliente
dbo.Documento.CodigoCliente
dbo.Proveedor.CodigoProveedor
3ero. Tener Indexado los campos del ORDER BY
dbo.Movimientos.CodigoArticulo
Respuesta Responder a este mensaje
#4 Roberto Carlos
12/12/2003 - 19:08 | Informe spam
Trata este código más optimizado...


SELECT
dbo.Movimientos.NumeroMovimiento,
dbo.Movimientos.CodigoArticulo,
dbo.TipoMovimiento.Descripcion,
dbo.Movimientos.TipoDocumento,
dbo.Movimientos.NumeroDocumento,
Origen = CASE dbo.Movimientos.TipoMovimiento
WHEN 'I' THEN dbo.Proveedor.Nombre
WHEN 'D' THEN dbo.Clientes.Nombres
WHEN 'S' THEN 'ALMACEN'
END,
Destino = CASE dbo.Movimientos.TipoMovimiento
WHEN 'I' OR 'D' THEN 'ALMACEN'
WHEN 'S' THEN dbo.Clientes.Nombres
END,
dbo.Movimientos.FechaMovimiento AS Fecha,
Cantidad = CASE dbo.Movimientos.tipomovimiento
WHEN 'S' THEN dbo.Movimientos.cantidad * (- 1)
ELSE dbo.Movimientos.cantidad
END
FROM
dbo.Movimientos (nolock)
INNER JOIN
dbo.TipoMovimiento (nolock)
ON
dbo.Movimientos.TipoMovimiento = dbo.TipoMovimiento.Codigo
INNER JOIN
dbo.Documento (nolock)
ON
dbo.Movimientos.NumeroDocumento = dbo.Documento.NumeroDocumento
INNER JOIN
dbo.Clientes (nolock)
ON
dbo.Documento.CodigoCliente = dbo.Clientes.CodigoCliente
INNER JOIN
dbo.Proveedor (nolock)
ON
dbo.Documento.CodigoCliente = dbo.Proveedor.CodigoProveedor
ORDER BY
dbo.Movimientos.CodigoArticulo


Sugerencias:
1ero. Este orden esta más congruente y carga menos la consulta.
2do. Tener Indexado los campos del On
dbo.Movimientos.TipoMovimiento
dbo.TipoMovimiento.Codigo
dbo.Movimientos.NumeroDocumento
dbo.Documento.NumeroDocumento
dbo.Documento.CodigoCliente
dbo.Clientes.CodigoCliente
dbo.Documento.CodigoCliente
dbo.Proveedor.CodigoProveedor
3ero. Tener Indexado los campos del ORDER BY
dbo.Movimientos.CodigoArticulo
4to. nolock -> Evita la revisión de registro y/o tablas bloquedas
resultando en una consulta mucho más rapida, ahora se debe tener un
uso cuidadoso, debido a que tambien lee transacciones bloqueadas
presentando un resultado no deseado.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida