Re: Funcion inet2int - error

From: Rubén da Silva <ruben(at)ozonomultimedia(dot)com>
To: postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Funcion inet2int - error
Date: 2006-12-01 18:56:12
Message-ID: 45707ACC.2060607@ozonomultimedia.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro Herrera wrote:
> Rubén da Silva escribió:
>
>>He creado una función para pasar de inet a entero largo (int8):
>>
>>==============
>>
>>CREATE OR REPLACE FUNCTION inet2int(inet "varchar")
>> RETURNS information_schema.cardinal_number AS
>
>
> Declarala como RETURNS int8. cardinal_number es un dominio sobre el
> tipo int4.
>

OK. Perfecto. Gracias.

Ahora que esto está solucionado, veo cuando la uso (con EXPLAIN ANALYZE)
que usa un "seq scan" en lugar de un "index scan".

Para ponernos en situación:

Imaginemos que tengo rangos de ips almacenados en una tabla como enteros
(int8) start y end.

Tengo un index de estas columnas de enteros.

Y quiero encontrar la red a la que pertenece la ip para ello:

SELECT id, blocks.ipnum_start, blocks.ipnum_end FROM blocks
WHERE inet2int('unaIP') > blocks.ipnum_start AND inet2int('unaIP') <
blocks.ipnum_end;

Esta consulta le ha llevado hacerla 74 segundos, sin embargo esta:

SELECT id, blocks.ipnum_start, blocks.ipnum_end FROM blocks
WHERE IPint > blocks.ipnum_start AND IPint < blocks.ipnum_end;

Le ha llevado 600 ms

Sin embargo lo que es el uso de la función demora 31 ms:
SELECT inet2int('UNAIP');

La diferencia está en usar o no la funcion de conversión, ¿Que ocurre?
EXPLAIN ANALYZE me dice que usando la funcion no usa los indices (seq
scan), ¿porque?, se ejecuta la funcion, tantas veces como registros

LA BD almacena casi tres millones de rangos de IP.

Un saludo, y gracias de nuevo.
Rubén

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2006-12-01 19:06:39 Re: Configuracion optima para servidor postgres
Previous Message Raul Andres Duque 2006-12-01 18:44:53 Re: Configuracion optima para servidor postgres