2008/8/28 "Carlos Beltrán V." <[EMAIL PROTECTED]>: > " Hash Cond: (di.documentos_id = dd.documentos_id)" > " -> Seq Scan on declaraciones_importacion di (cost=0.00..18761.24 > rows=20725 width=16)
(actual time=1070.900..1274549.934 rows=3305 loops=1)" > " Filter: > es_declaracion_modalidad_temporal(declaraciones_importacion_id)" como dices esta filtrando esto primero. pero fijate ademas en el estimado de filas a retornar... solo por casualidad has ejecutado ANALYZE recientemente? de todos modos, es evidente que esta creyendo que la funcion es "barata". no mostraste el nivel de volatilidad con que estas marcando la funcion: IMMUTABLE, STABLE o VOLATILE? > > La función es > > create or replace function es_declaracion_modalidad_temporal(bigint) returns > boolean as ' > DECLARE > esta_declaracion_id ALIAS FOR $1; > es_temporal boolean; > esta_modalidad_id integer; > BEGIN > SELECT modalidades_id into esta_modalidad_id FROM items_declaracion_imp > WHERE declaraciones_importacion_id = esta_declaracion_id; > SELECT es_modalidad_temporal(esta_modalidad_id) INTO es_temporal; > return es_temporal; > END; > esta funcion debes estarla marcando como STABLE, ademas no creo que necesites una funcion plpgsql. podrias escribirlas asi: create or replace function es_declaracion_modalidad_temporal(bigint) returns boolean as ' SELECT es_modalidad_temporal(modalidades_id) FROM (SELECT modalidades_id FROM items_declaracion_imp WHERE declaraciones_importacion_id = $1) as foo; ' language sql stable; create or replace function es_modalidad_temporal(int) returns boolean as ' SELECT $1 IN (180000209, 180000198, 180000204, 180000210, 180000200, 180000206, 180000212, 180000199, 180000205, 180000211, 180000196, 180000197, 180100013, 180000203); ' language sql immutable; -- Atentamente, Jaime Casanova Soporte y capacitación de PostgreSQL Asesoría y desarrollo de sistemas Guayaquil - Ecuador Cel. (593) 87171157 -- TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá leerlo