Re: optimización de busqueda por like

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Anita Ramirez <anita(dot)ins(at)gmail(dot)com>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: optimización de busqueda por like
Date: 2011-11-16 16:05:12
Message-ID: 1321459256-sup-3882@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Excerpts from Anita Ramirez's message of mar nov 15 15:11:24 -0300 2011:
> Buenas tardes,
>
> Resulta que tengo una función que realiza varias validaciones, inserciones
> etc. Una de ellas es realizar búsqueda por like a una tabla. Básicamente
> tengo dos tablas "alumno" y "persona", a cada alumno se debe buscar en la
> tabla persona, y para ello solo contamos con nombres y apellidos (nombre
> completo, es decir en un solo campo y campos separados, es decir nombre1,
> nombre2, apellido1, apellido2),

Eso me huele a mal diseño. ¿No debería haber una llave foránea en
alumno que apunte a un registro específico en persona? Si cada alumno
es también una persona, ¿qué sentido tiene almacenar los nombres y
apellidos en alumno, que ya están en persona?

> por lo que inicialmente procedemos a buscar
> por "=", considerando mayusculas, minusculas, caracteres especiales, si eso
> no emite resultado procedemos a buscar por like en los campos separados, y
> si nuevamente no emite resultados, se realiza nuevamente la búsqueda por
> like en el campo que contiene el nombre y apellido completo.
>
> La tabla persona en la que se realiza la búsqueda tiene aproximadamente
> 580000 registros. Probé con indices btree, y también leí acerca de
> varchar_pattern_ops, pero con éste ultimo no es posible utilizar "es
> igual", por lo que no me resulta.

Una idea simple sería tener dos índices, un btree normal y un btree con
varchar_pattern_ops. Eso te permitiría usar búsquedas con LIKE y al
mismo tiempo con =.

> Tal cual como se encuentra ahora por 50 registros tarda 6 minutos
> aproximadamente, lo cual es mas que excesivo.

Hay algo muy mal en tu sistema.

--
Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2011-11-16 18:53:20 Re: Rv: recorrer old
Previous Message Emanuel Calvo 2011-11-16 15:53:16 Re: [pgsql-es-ayuda] optimización de busqueda por like