[pyar] [django] Consulta en tabla grande con annotate y Sum

Matias Varela matu.varela en gmail.com
Jue Dic 18 22:46:25 ART 2014


Buenas noches!

Ariel, la opción rápida y fea anduvo "de maravillas"! Muy buena
performance. Lo probamos con 20k clientes y 2M de movimientos, y vista
se carga en algunos segundos.

Así armé una migración con el modelo ClienteView y metí el sql en esa
migración, y quedo andando para el resto de los desarrolladores.

También vamos a probar lo de meterle indices a dni, nombre y apellido,
que serán las busquedas más comunes.

Muchas gracias a todos los que me dieron una mano, la verdad que la
calidad humana y técnica en este grupo es indiscutible.

Saludos!

El 18/12/14 07:47, Pedro Jose Pezzarini escribió:
> Por último, crea índices en campos claves del join, y en los que vas a
> filtrar.
>
> Yo tuve un problema similar y esta sección me ayudó mucho.
> https://docs.djangoproject.com/en/1.6/topics/db/optimization/
>
> El 18 de diciembre de 2014, 7:38, Ariel Rossanigo
> <arielrossanigo en gmail.com <mailto:arielrossanigo en gmail.com>> escribió:
>
>
>
>     El 17 de diciembre de 2014, 2:42 p. m., Matias
>     Varela<matu.varela en gmail.com <mailto:matu.varela en gmail.com>> escribió:
>     [...] 
>
>         ¿Se puede generar un QuerySet manualmente? por lo que leí no.
>         Porque sería una solución.
>
>
>     Una solución rápida y fea que se me ocurre es crear una vista en
>     postgres y armar un modelo de esa vista.
>
>     Por ejemplo:
>     * Ejecutas esto en postgres
>
>     CREATE VIEW vw_reporte As
>     SELECT "pp_cliente"."id", "pp_cliente"."nombre", mov."monto" AS
>     "saldo" 
>     FROM "pp_cliente" 
>     LEFT OUTER JOIN (
>     select cliente_id, sum(monto) as monto 
>     from "pp_movimientocliente"
>     group by cliente_id) mov ON ( "pp_cliente"."id" = mov."cliente_id" ) 
>
>     * models.py
>
>     class MiReporte(models.Model):
>         id = models.IntegerField(primary_key=True)
>         nombre = models.CharField()
>         saldo = models.FloatField()
>
>         class Meta:
>             managed = False
>             db_table = 'vw_reporte'
>
>
>     Después haces la query directamente y obtenes un Queryset
>
>     In [1]: from pp.models import MiReporte
>
>     In [2]: q = MiReporte.objects.all()
>
>     In [3]: print type(q), str(q.query)
>     <class 'django.db.models.query.QuerySet'> SELECT
>     "vw_reporte"."id", "vw_reporte"."nombre", "vw_reporte"."saldo"
>     FROM "vw_reporte"
>
>
>
>
>     _______________________________________________
>     pyar mailing list pyar en python.org.ar <mailto:pyar en python.org.ar>
>     http://listas.python.org.ar/listinfo/pyar
>
>     PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
>     La lista de PyAr esta Hosteada en USLA - Usuarios de Software
>     Libre de Argentina - http://www.usla.org.ar
>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar


-- 
*Matías E. Varela*
Skype: matu.varela
Jadder: matuu en python.org.ar

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20141218/72b5eecb/attachment-0001.html>


More information about the pyar mailing list