Re: [Fwd: Re: Consulta, a priori, sencilla]

From: Raúl Andrés Duque Murillo <ra_duque(at)yahoo(dot)com(dot)mx>
To: "I(dot)N(dot)T(dot) - Programación" <dpto(dot)programacion(at)grupo-int(dot)com>, "Lista - PostgreSQL" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [Fwd: Re: Consulta, a priori, sencilla]
Date: 2008-12-30 11:21:50
Message-ID: E70991019E87400DB4976BA7177777D1@Principal
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

>
>
>From: "I.N.T. - Programación"
>Sent: Tuesday, December 30, 2008 6:03 AM
>To: POSTGRESQL - Ayuda
>Subject: [Fwd: Re: [pgsql-es-ayuda] Consulta, a priori, sencilla]
>
>
>El campo 'apellidos' no es 'varchar' sino 'char(80)'
>
>Realizando el índice de la forma:
>
>
>CREATE INDEX envios_idx01 ON envios USING btree(apellidos
>varchar_pattern_ops);
>
>me da el siguiente error:
>
>ERROR: la clase de operadores "varchar_pattern_ops" no acepta el tipo de
>datos character
>
>pero en cambio he utilizado el índice:
>
>CREATE INDEX envios_idx01 ON envios USING btree(apellidos
>bpchar_pattern_ops);
>
>¡¡¡Y FUNCIONA PERFECTAMENTE!!!
>

Si ... asumí que era varchar pero realmente se debe usar un xxxx_pattern_ops
dependiendo de si es varchar, char, text, etc.

Porque usas un char para un apellido? Recuerda que los char son de longitud
FIJA así que si en promedio un apellido tiene 10 caracteres estás
desperdiciando 70 caracteres por cada registro en la tabla envios. Ahora si
tienes 1.677.229 registros estas desperdiciando en total aprox. 1.677.229 x
70 = 117MB, sin contar caracteres adicionales por la codificación ni
códigos adicionales del motor.

También mira la posibilidad de actualizar tu versión de postgresql ... los
cambios que se han realizado son bastantes y el performance del motor ha
mejorado en 30% (este porcentaje lo he "escuchado", no lo he medido pero se
"siente").

Me alegro mucho que hallas solucionado tu problema.

Atentamente,

RAUL DUQUE
Bogotá, Colombia

>
>Muchísimas gracias a todos por vuestra ayuda...
>
>

-------- Mensaje original -------- Asunto: Re: [pgsql-es-ayuda] Consulta, a
priori, sencilla
Fecha: Mon, 29 Dec 2008 11:14:09 -0500
De: Raul Andres Duque <ra_duque(at)yahoo(dot)com(dot)mx>
Para: "I.N.T. - Programación" <dpto(dot)programacion(at)grupo-int(dot)com>
Referencias: <4958E9D3(dot)4000903(at)grupo-int(dot)com>

----- Original Message -----
From: ""I.N.T. - Programación"" <dpto(dot)programacion(at)grupo-int(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Monday, December 29, 2008 10:16 AM
Subject: [pgsql-es-ayuda] Consulta, a priori, sencilla

> Buenas,
>
> Tengo una BBDD con una tabla llamada 'envios' de 1.677.229 registros
>
> La consulta es:
>
> SELECT * FROM envios WHERE apellidos LIKE 'LOQUESEA%'
>
> y está creado el índice:
>
> CREATE INDEX envios_idx01 ON envios USING btree(apellidos);
>
> La consulta tarda casi 50seg. en ejecutarse y es un tiempo inadmisible.
> Está claro que no utiliza el índice ¿porqué?
>

recuerda que si tu locale es diferente a 'C', debes los indices con
varchar_pattern_ops. En este link encuentras la info correspondiente:
http://www.postgresql.org/docs/8.3/static/indexes-opclass.html

Atentamente,

RAUL DUQUE

> He realizado VACUUM FULL ANALYZE varias veces, regenerado el índice y nada
>
> ¿Alguna sugerencia?
>
> Gracias de antemano --
> TIP 4: No hagas 'kill -9' a postmaster

__________ Information from ESET Smart Security, version of virus signature
database 3722 (20081229) __________

The message was checked by ESET Smart Security.

http://www.eset.com

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Raúl Andrés Duque Murillo 2008-12-30 11:30:19 Estadisticas base de datos en PGADMIN
Previous Message Silvio Quadri 2008-12-30 11:10:30 Re: Consulta, a priori, sencilla