Re: Funcion SQL mas lenta que un SQL

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Omar Zeballos <ozeballos(at)kantutani(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Funcion SQL mas lenta que un SQL
Date: 2008-03-11 15:45:29
Message-ID: 20080311154529.GQ9116@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Omar Zeballos escribió:
> Definitivamente, aún sin hacer las uniones realice la prueba del explain plan y es otro plan de ejecucion el que realiza y es mucho mas lento en el caso de la funcion, si me permiten les envio los resultados, ahora esto se puso mas oscuro para mi, si alguien tiene una explicacion talvez trabajaria mejor al definir estos obejtos en la base.
>
> SELECT doc.codalmacen, kar.codproducto, sum(kar.cantidad)as CANTIDAD
> FROM kdx_kardex as kar
> INNER JOIN kdx_documentos doc on doc.seqkdxdocumento = kar.seqkdxdocumento
> WHERE (doc.coddocumento='RCP' or doc.coddocumento='INV')
> AND doc.estado='1'
> AND doc.fecha <=$1
> AND kar.codproducto = coalesce($2,kar.codproducto)
> GROUP BY kar.codproducto, doc.codalmacen

Hmm, ¿por qué tienes el COALESCE aquí? Entiendo que es para poder pasar
un NULL a la función y hacer que retorne todos los valores. Pero
podrías tratar qué sucede si lo sacas, es decir si fuerzas a que la
función siempre reciba un parámetro $2 no nulo?

En todo caso, todo depende de qué tan pesimista se pueda ser para
optimizar las cláusulas como fecha <= $1 y codproducto=$2. En el peor
de los casos puede tocar que sea un valor de los más comunes, y si tiene
que forzar un plan menos óptimo para satisfacer esos casos, lo hará.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message leonel 2008-03-11 15:45:50 Re: postgresql 8.3 y ubuntu 7.10
Previous Message Alvaro Herrera 2008-03-11 15:36:37 Re: Demora mi consulta