From: | Manuel Alejandro Estevez Fernandez <stvzito(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Agilizar consultas sobre fechas |
Date: | 2009-10-01 15:34:18 |
Message-ID: | 4AC4CBFA.7080204@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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
La estructura de las tablas es la siguiente:
CREATE TABLE ventas
(
id_venta serial NOT NULL,
id_corte_caja bigint NOT NULL,
id_sucursal smallint NOT NULL,
id_concepto smallint NOT NULL,
numero_caja smallint NOT NULL,
folio_venta bigint,
folio_devolucion bigint,
fecha timestamp without time zone NOT NULL,
id_estatus smallint NOT NULL,
devuelto boolean,
sincronizado integer DEFAULT 0,
CONSTRAINT ventas_pkey PRIMARY KEY (id_venta, id_corte_caja,
id_sucursal, numero_caja),
CONSTRAINT ventas_fk_conceptos FOREIGN KEY (id_concepto)
REFERENCES conceptos (id_concepto) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT ventas_fk_corte_caja FOREIGN KEY (id_corte_caja,
id_sucursal, numero_caja)
REFERENCES corte_caja (id_corte_caja, id_sucursal, numero_caja)
MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT ventas_fk_estatus FOREIGN KEY (id_estatus)
REFERENCES estatus (id_estatus) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;
ALTER TABLE ventas OWNER TO yepas;
-- Index: ventas_id_sucursal_index
-- DROP INDEX ventas_id_sucursal_index;
CREATE INDEX ventas_id_sucursal_index
ON ventas
USING btree
(id_sucursal);
-- Index: ventas_id_venta_index
-- DROP INDEX ventas_id_venta_index;
CREATE INDEX ventas_id_venta_index
ON ventas
USING btree
(id_venta);
CREATE TABLE ventas_detalle
(
id_venta bigint NOT NULL,
id_sucursal smallint NOT NULL,
id_corte_caja bigint NOT NULL,
numero_caja smallint NOT NULL,
id_venta_detalle serial NOT NULL,
id_esquema_impuesto smallint NOT NULL,
id_esquema_oferta smallint NOT NULL,
cantidad numeric(12,3),
precio_venta_unidad_venta numeric(12,3),
tipo_precio text,
precio_regular_unidad_venta numeric(12,3),
precio_chequeo_unidad_venta numeric(12,3),
precio_oferta_unidad_venta numeric(12,3),
kit text,
id_kit smallint,
factor numeric(12,3),
costo_unitario_promedio numeric(12,3),
cantidad_devuelta numeric(12,3),
id_articulo bigint NOT NULL,
CONSTRAINT ventas_detalle_pkey PRIMARY KEY (id_venta, id_sucursal,
id_corte_caja, numero_caja, id_venta_detalle),
CONSTRAINT esquema_ofertas_fk_ofertas FOREIGN KEY (id_esquema_oferta)
REFERENCES esquema_ofertas (id_esquema_oferta) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT venta_detalle_fk_esquema_impuesto FOREIGN KEY
(id_esquema_impuesto)
REFERENCES esquema_impuestos (id_esquema_impuesto) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT ventas_detalle_fk_articulos FOREIGN KEY (id_articulo)
REFERENCES articulos (id_articulo) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT ventas_detalle_fk_kits FOREIGN KEY (id_kit)
REFERENCES kits (id_kit) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT ventas_detalle_fk_ventas FOREIGN KEY (id_venta,
id_corte_caja, numero_caja, id_sucursal)
REFERENCES ventas (id_venta, id_corte_caja, numero_caja,
id_sucursal) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;
ALTER TABLE ventas_detalle OWNER TO yepas;
-- Index: ix_id_esquema_oferta
-- DROP INDEX ix_id_esquema_oferta;
CREATE INDEX ix_id_esquema_oferta
ON ventas_detalle
USING btree
(id_esquema_oferta);
-- Index: ventas_detalle_id_sucursal_index
-- DROP INDEX ventas_detalle_id_sucursal_index;
CREATE INDEX ventas_detalle_id_sucursal_index
ON ventas_detalle
USING btree
(id_sucursal);
-- Index: ventas_detalle_id_ventas_index
-- DROP INDEX ventas_detalle_id_ventas_index;
CREATE INDEX ventas_detalle_id_ventas_index
ON ventas_detalle
USING btree
(id_venta);
El problema es el tiempo de respuesta de la consulta la tabla ventas
tiene alrededor de 36 millones de registros y la de venta detalle cerca
de 76 millones.Y para una sucursal y un día en específico tarda entre 30
a 40 minutos. ¿Alguna sugerencia o tip para mejorar la consulta?
--
Atentamente.
Manuel Alejandro Estévez Fernández
From | Date | Subject | |
---|---|---|---|
Next Message | Calabaza | 2009-10-01 15:51:37 | Re: Agilizar consultas sobre fechas |
Previous Message | Alvaro Herrera | 2009-10-01 14:44:31 | Re: Notify/listen |