Acelerar Consulta SQL

78 views
Skip to first unread message

Roberto Lemos

unread,
Nov 20, 2013, 6:16:20 AM11/20/13
to publice...@googlegroups.com
Buenos dias.
 
Tengo el siguiente caso, una tabla de compras en la cual se registran todas las compras de la empresa y una de pagos, en la que voy registrando las cancelaciones y/o amortizaciones, en la misma tabla de compras tengo un campo Saldo, el cual me va dando el saldo al día, el problema surge que ahora me piden que presente un corte a un determinado mes, por ejemplo todas las facturas pendientes de cancelar al 31/10, en este reporte podrian aparecer facturas como por pagar, si estas por ejemplo se hubieran cancelado el 15/11.
 
Lo que estoy haciendo es cargar todas las compras hasta el periodo solicitado en una tabla temporal, luego cargo los pagos realizados, voy recorriendo toda esta tabla, y actualizo los saldos, el resultado es lo que necesito, pero demora demasiado.
 
Alguna alternativa que me puedan sugerir. Trabajo con SQL Server 2012
 
 
Saludos
 
Roberto Lemos

Ricardo Pina

unread,
Nov 20, 2013, 7:09:48 AM11/20/13
to Grupo VFP
Hola Roberto
 
Tienes mal diseñadas tus tablas, compras y pagos deben ir en una tabla ctacte, pero de todas maneras publica la consulta y es probable que la optimicemos.
 
Saludos
--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

mpulla

unread,
Nov 20, 2013, 7:44:05 AM11/20/13
to publice...@googlegroups.com
Hola Roberto.

Además de lo que te pide Ricardo, sería bueno que ver la estructura de tus tablas, índices y una muestra del resultado deseado.

Saludos.
Mauricio

MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Nov 20, 2013, 12:12:20 PM11/20/13
to publice...@googlegroups.com
Hola en que tienes tu data, SQL Server no te vaya ayudar a que mejores el resultado de tu Select si tienes mal diseñada tus tablas y ademas a ello tienes que tomar en cuenta que si no manejas indices como CLUSTERED o NON-CLUSTERED asi migres tu data a SQL Server siempre sera lenta.


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
Framework Multi-conexion v6.0 a cualquier base de datos 

Andrés Oscar Gimbatti

unread,
Nov 20, 2013, 12:40:34 PM11/20/13
to publice...@googlegroups.com
Hola,
yo trabajo con postgres, pero he tenido el mismo problema en algunos sistemas. La consulta al motor de base de datos la mejore MUCHISIMO creando un indice sobre el campo que tenia en el WHERE.
Ej. tengo un sistema de estadisticas con una tabla con 6 millones de registros. Una consulta me tardaba en devolver el resultado 45 segundos, después del indice me tardaba aproximadamente entre 5 y 10 segundos.
Tratando de resolver el problema, me di cuenta que perdía muchisimo mas tiempo trabajando los cursores una vez traidos, que si lo podía resolver en la consulta al motor de bases de datos.

Esta es mi experiencia, espero te de un puntapie para lograr resolver el problema.

Saludos

PD: casi todos los motores tienen algun comando o alguna utilidad para medir las consultas, como ser la cantidad de registros que tuvo que leer para lograr el resultado, y de esa forma darte cuenta si tenes que crear un indice, ojo con irte de mambo con los indices, a la larga y si es muy grande la tabla te lentifica los procesos de insert y delete demasiados indices.

Alejandro Isla

unread,
Nov 20, 2013, 4:24:06 PM11/20/13
to publice...@googlegroups.com

Hola, como dice, sin las tablas es hablar de supociciones, entonces, suponiendo:
1) que tenes un registro en ambas tablas que te relacionan las mismas, digamos cod_compra (index primario/unico para compras y en pagos indica a que compra está aplicado dicho pago, o porción del pago)


podes hacer un select con algún group e inner join tipo:

select cod_compra, max(monto_compra) as monto, sum(montos_pagos) as monto_cancelado from compras inner join (condicion)  where fecha_compra<{xx/xx/xxxx} group by cod_compra 

es la idea que me pasó por la cabeza... espero funcione.

Saludos, Alejandro

Alejandro Isla

unread,
Nov 20, 2013, 4:25:49 PM11/20/13
to publice...@googlegroups.com
Me olvidé, después preguntas o filtras  si monto = monto_cancelado para saber cuales están canceladas.
Reply all
Reply to author
Forward
0 new messages