El 01/10/09 12:13, Jaime Casanova escribió:
On Thu, Oct 1, 2009 at 10:34 AM, Manuel Alejandro Estevez Fernandez
<stvz...@gmail.com>  wrote:
Saludos a todos.

Tengo la siguiente consulta:

select vd.cantidad,vd.precio_venta_unidad_venta,vd.id_esquema_impuesto
                        from ventas_detalle  vd, ventas v, articulos a
                        where     v.id_sucursal=sucursal and
                                vd.id_sucursal=v.id_sucursal and
                                vd.id_venta=v.id_venta and
                                cast(v.fecha as date) = fecha_revision  and
                                vd.id_articulo = a.id_articulo and
                                a.servicio is null

un explain analyze ayudaria bastante a saber que esta pasando pero es
obvio que la consulta esta retornando un producto cartesiano, fijate
que la relacion entre ventas_detalle y ventas es: id_venta,
id_corte_caja, numero_caja, id_sucursal y tu solo estas usando dos de
esos en el JOIN

Si me di cuenta, bueno aqui la consulta corregida y el analize

select vd.cantidad,vd.precio_venta_unidad_venta,vd.id_esquema_impuesto
from ventas_detalle  vd, ventas v, articulos a
where     v.id_sucursal=11 and
    vd.id_sucursal=v.id_sucursal and
    vd.id_venta=v.id_venta and
    v.numero_caja = vd.numero_caja and
    v.id_corte_caja=vd.id_corte_caja and
    cast(v.fecha as date) = '2009-08-13' and
    vd.id_articulo = a.id_articulo and
    a.id_servicio is null


"Nested Loop  (cost=0.00..9.08 rows=1 width=23)"
"  ->  Nested Loop  (cost=0.00..6.05 rows=1 width=31)"
" Join Filter: (("outer".id_venta = "inner".id_venta) AND ("inner".numero_caja = "outer".numero_caja) AND ("inner".id_corte_caja = "outer".id_corte_caja))" " -> Index Scan using ventas_detalle_id_sucursal_index on ventas_detalle vd (cost=0.00..3.01 rows=1 width=51)"
"              Index Cond: (id_sucursal = 11)"
" -> Index Scan using ventas_id_sucursal_index on ventas v (cost=0.00..3.02 rows=1 width=16)"
"              Index Cond: (id_sucursal = 11)"
"              Filter: ((fecha)::date = '2009-08-13'::date)"
" -> Index Scan using articulos_pkey on articulos a (cost=0.00..3.01 rows=1 width=4)"
"        Index Cond: ("outer".id_articulo = a.id_articulo)"
"        Filter: (id_servicio IS NULL)"

Saludos.

--
Atentamente.

Manuel Alejandro Estévez Fernández

--
TIP 5: �Has le�do nuestro extenso FAQ?
        http://www.postgresql.org/docs/faqs.FAQ.html

Responder a