La tabla alumnos es una especialización de la tabla personas, como dice Alvaro, Alumnos debería tener una clave foranea apuntando a la persona correspondiente. Alumnos no debería tener los otros datos que ya están en la tabla personas.
Guillermo Villanueva El 16 de noviembre de 2011 13:05, Alvaro Herrera <[email protected]>escribió: > > 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 <[email protected]> > - > Enviado a la lista de correo pgsql-es-ayuda ([email protected] > ) > Para cambiar tu suscripción: > http://www.postgresql.org/mailpref/pgsql-es-ayuda >
