juan escribió:

> Si las consultas que hare son de este tipo:
> select * from personas where apellido1 ilike '%JUAN%' and apellido
> ilike '%RAMIREZ%'

Una consulta como esa sólo tendría sentido si esperaras que un usuario
ingresara una búsqueda con "mirez" y esperara que el sistema retornara
Ramirez.  Si no es así, entonces no pongas el % al principio:

select * from personas where nombre ilike 'JUAN%' and apellido ilike 'RAMIREZ%'

Si lo haces de esta forma, el sistema puede usar un índice btree común y
corriente:

create index apellido1_idx on personas (apellido1);
create index nombre_idx on personas (nombre);

Lo cierto es que va a tener problemas con el ILIKE y con los acentos,
así que te recomiendo que busques cómo hacer índices con to_lower y con
to_ascii o algún equivalente.

Para este caso creo que lo del text search no sería necesariamente muy
apropiado (a menos que quisieras que los usuarios pudieran ingresar
"beeth" y que retornara registros con "van Beethoven", o, más realista,
"jara" y que retornara "de la jara" además de "jara").  Yo no lo haría.


Finalmente, ten en cuenta que si bien para nosotros de costumbre
hispánica es correcto separar los apellidos en 1 y 2 (o más
concretamente en paterno y materno), no suele ser correcto separar los
nombres en 2; hay personas con un solo nombre, y otros con tres y
cuatro.  Generalmente el modelo más correcto es "apellido paterno",
"apellido materno", "nombres".

-- 
Alvaro Herrera                          Developer, http://www.PostgreSQL.org/
"This is a foot just waiting to be shot"                (Andrew Dunstan)
--
TIP 8: explain analyze es tu amigo

Responder a