Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/02/2006, 18:29
Avatar de Escoffie
Escoffie
 
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Eficientar búsqueda que tarda y consume muchos recursos

Hola foreros:

El problema es: ¿Cómo puedo eficientar una búsqueda que se cuelga demasiado? Mi proveedor de hosting me dice que cierto query consume muchos recursos.

Sucede que: Tengo una tabla (de productos) con más de 2800 registros de la que al mostrar un registro debe sugerir automáticamente 5 productos relacionados. Por ejemplo, si estás viendo una guitarra eléctrica, debe aparecer sugerido un amplificador, pedales, cables, afinadores, bajos, guitarras acústicas, etc.

Esto lo resolví utilizando MATCH() AGAINST() IN BOOLEAN MODE y funcionó muy bien mientras fueron menos de mil registros.

En concreto, ¿alguien sabe cómo puedo hacer menos colgado el proceso? ¿Qué cambios le puedo hacer a mi consulta para que esté menos lenta?

Aquí les dejo un ejemplo de la consulta:

Dadas las tablas: "html" e "images", que comparten una clave foránea, encontrar las ocurrencias de cierta cadena en "html", limitar a 5 resultados y ordenar por relevancia.

Los campos html.cod_child e images.cod_child me sirven para relacionar ambas tablas.
El campo html.related guarda ciertos términos con los que relaciono los productos, y es de tipo Fulltext.

Código:
SELECT a.cod_child, a.h1, CONCAT( a.cod_child,  '_', h1,  '.php'  )  AS url, 
MATCH (a.related
)
AGAINST ( 'electronica cables, adaptadores conectores'
IN BOOLEAN
MODE 
) AS rel, b.thumbUrl_img AS foto
FROM html AS a
LEFT  JOIN images AS b
USING ( cod_child ) 
WHERE  MATCH (a.related
)
AGAINST ( 'electronica cables, adaptadores conectores'
IN BOOLEAN
MODE 
)
AND a.cod_st =3
AND a.cod_child !=  '1362'
ORDER  BY rel DESC 
LIMIT 0 , 5
Saludos y gracias. Cualquier idea es buena, incluso si implica manipular la estructura de las tablas.