Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/09/2012, 16:26
Illien
 
Fecha de Ingreso: marzo-2008
Mensajes: 15
Antigüedad: 16 años, 8 meses
Puntos: 1
Intento optimizar una consulta sql lenta

Buenas tardes!
Tengo un problemilla con una consulta sql y es que es demasiado lenta. No tengo mucha experiencia en el campo y espero que alguien de por aquí pueda darme algún consejo útil.

Es una base de datos de películas y el objetivo de la consulta es hacer una búsqueda general de películas en todas las tablas a partir de un texto que escriba un usuario.
Es decir, que si el usuario escribe 'algo', aparezcan todas las pelis que tengan en el titulo 'algo', pero también todas las pelis que tengan asociadas algún actor que contenga 'algo' y así con todos los datos.

La consulta es esta:

Código:
SELECT DISTINCT pelicula.titulo,pelicula.año,pelicula.duracion,pelicula.pais 
FROM pelicula,es_actor_pelicula,es_director,idioma_pelicula,subtitulos_pelicula,tiene_pelicula,ubicacion_pelicula
WHERE 
(pelicula.titulo REGEXP '.*consulta.*') 
OR (pelicula.año REGEXP '.*consulta.*') 
OR (pelicula.pais REGEXP '.*consulta.*') 
OR (pelicula.notas REGEXP '.*consulta.*') 
OR (es_actor_pelicula.nombre REGEXP '.*consulta.*' AND pelicula.titulo= es_actor_pelicula.tituloPelicula AND pelicula.año = es_actor_pelicula.añoPelicula) 
OR (es_director.nombre REGEXP '.*consulta.*' AND pelicula.titulo= es_director.tituloPelicula AND pelicula.año = es_director.añoPelicula) 
OR (idioma_pelicula.idioma REGEXP '.*consulta.*' AND pelicula.titulo= idioma_pelicula.tituloPelicula AND pelicula.año = idioma_pelicula.añoPelicula) 
OR (subtitulos_pelicula.subtitulos REGEXP '.*consulta.*' AND pelicula.titulo= subtitulos_pelicula.tituloPelicula AND pelicula.año = subtitulos_pelicula.añoPelicula) 
OR (tiene_pelicula.productora REGEXP '.*consulta.*' AND pelicula.titulo= tiene_pelicula.tituloPelicula AND pelicula.año = tiene_pelicula.añoPelicula) 
OR (ubicacion_pelicula.ubicacion REGEXP '.*consulta.*' AND pelicula.titulo= ubicacion_pelicula.tituloPelicula AND pelicula.año = ubicacion_pelicula.añoPelicula)
Ya sé que son muchas cosas para una misma consulta.... pero con pocos datos iba bien, hasta que metí más de 10 películas :(
Espero que alguien pueda echarme una mano para optimizarla, porque hace poco que trabajo con sql.
Muchas gracias!! :D