[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