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!!!
Muchísimas gracias a todos por vuestra ayuda...
-------- Mensaje original --------
----- Original Message -----
From: ""I.N.T. - Programación"" <dpto.programacion@grupo-int.com>
To: <pgsql-es-ayuda@postgresql.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