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:48:45
Message-ID: 0600FB7D18B94DD792C39977CD329119@Principal
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

--------------------------------------------------
From: ""I.N.T. - Programación"" <dpto(dot)programacion(at)grupo-int(dot)com>
Sent: Tuesday, December 30, 2008 6:43 AM
To: "Raúl Andrés Duque Murillo" <ra_duque(at)yahoo(dot)com(dot)mx>
Subject: Re: [Fwd: Re: [pgsql-es-ayuda] Consulta, a priori, sencilla]

> Raúl Andrés Duque Murillo escribió:
>>>
>>>
>>> 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.
>>
> Ya lo sé, pero resulta que la BBDD no es mía, digamos que la heredé... Yo
> siempre utilizo 'varchar' sin ningún tipo de problema.
>
> Lo que probablemente hagamos es regenerarla completamente (tal y como yo
> la diseñaría, char por varchar, etc...) y realizar un pg_restore de la
> copia de seguridad (si es que traga). Si es posible también cambiaremos a
> locale 'C', hablaré con el administrador del sistema.
>

Evalua bien el tema de pasarte a locale 'C' ... no podrás usar sino
caracteres convencionales ... nada de tildes, eñes, etc.

>> 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").
>>
> Según me comenta el administrador la distribución de postgreSQL estable
> para Debian (que es la que lleva el servidor) no es la 8.3, sino la 7.x
> (la que sea). Lo intentaremos...

Si ... esto de las versiones estables para Debian es una de las grandes
críticas que se le hace a Debian (ubuntu) ... aunque mi distro favorita es
Debian. Se pueden usar
backports(http://packages.debian.org/etch-backports/), una fuente testing o
compilar desde fuentes para tener lo mejor de postgresql en tu Debian

>> 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
>>
>
>
> __________ 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 Alvaro Herrera 2008-12-30 14:37:53 Re: Estadisticas base de datos en PGADMIN
Previous Message Raúl Andrés Duque Murillo 2008-12-30 11:30:19 Estadisticas base de datos en PGADMIN