Re: preevaluar consulta

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Gabriel Ferro <gabrielrferro(at)yahoo(dot)com(dot)ar>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: preevaluar consulta
Date: 2008-06-19 12:47:05
Message-ID: 20080619124705.GM5077@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gabriel Ferro escribió:

> como veran es simple pero si por ejemplo pongo buscar los "MARTINEZ",
> me pueden llegar a demorar bastante desde que la ejecuto hasta que el
> primer registro esta disponible y su vez entregar una gran cantidad de
> registros. creo que si antes un select similar pero solo con un
> rowcount, eliminaria los tiempos de armado de la tabla resultado, pero
> creo que no ganaria demasiado en tiempos de respuestas y recursos.

No vas a ganar nada. Muestra el explain analyze. ¿Estás seguro que la
consulta es correcta? Me llama la atención esta condición:

analisis.personas.tipodoc=analisis.docu.clave

> Lo que quisiera saber es si existe la forma de preevaluar la cantidad
> de registros o mejor aun hacer que el servidor me vaya entregando de a
> un registro de modo que la aplicacion o el usuario pueda cortar el
> proceso, perdon por mi extrapolacion pero algo asi como el streaming

Puedes usar un cursor: DECLARE foo FOR select ... y luego FETCH 1 FROM foo
(todo esto debe ir dentro de una transaccion). Sin embargo, si el plan
de ejecución es malo seguirá siendo malo con un cursor. Quizás
necesitas mejorar alguna otra cosa.

... huh, ya entiendo, el problema es este:

WHERE (analisis.personas.nombre LIKE '%" & nomper & "%')

Es LIKE no es indexado y por lo tanto es muy lento. Se puede mejorar.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gorka 2008-06-19 12:57:22 Historial de comandos
Previous Message Calabaza 2008-06-19 12:02:49 Re: preevaluar consulta