
08/09/2009, 15:30
|
Colaborador | | Fecha de Ingreso: marzo-2008 Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 17 años Puntos: 300 | |
Respuesta: consulta demasiado lenta por el order by Del tema no sé nada, Lexus, eso ya te lo anticipo, pero yo haría algunas pruebas
1) lo primero quitaría num_factura del select. No tiene mucho sentido traerte un num_factura si lo que sacas es un count… y un sum de un group by.
SELECT sum(total_conIVA) as total, count(distinct(num_factura)) as cant FROM pedidos WHERE estado_pedido = 1 group by id_contacto order by cant desc
2) Puedes cambiar el orden de los elementos del select para ver lo que ocurre
SELECT count(distinct(num_factura)) as cant, sum(total_conIVA) as total FROM pedidos WHERE estado_pedido = 1 group by id_contacto order by cant desc
3) Si consideras que el mejor cliente es el que más facturas distintas genera, quita el total, y esta sería casi mi preferida. No tiene sentido ordenar por cant si realmente no se dirime por cant, sino que también interviene el sum. Aquí no parece el caso. Quítalo.
SELECT count(distinct(num_factura)) as cant FROM pedidos WHERE estado_pedido = 1 group by id_contacto order by cant desc
4) Yo incluso probaría una subconsulta para ordenar, aunque seguro que es más lenta.
5) O trataría de limitar con el having. Puede que también sea más lenta, no lo sé. Imagina que un número de facturas medio es 5 y los que más tienen superan en cualquier caso las 20
SELECT count(distinct(num_factura)) as cant FROM pedidos WHERE estado_pedido = 1 group by id_contacto having cant > 20 order by cant desc
Con eso ya habrías eliminado a muchos en el order. Haz pruebas y dinos, pues estamos deseosos de saber los resultados (yo desde luego que sí).
Saludos a todos |