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