Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Mysql

Respuesta
 
Herramientas Desplegado
Antiguo 06-feb-2006, 17:29   #1 (permalink)
Escoffie tiene algunos puntos positivos de karma
 
Avatar de Escoffie
 
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 234
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.
Escoffie está desconectado   Responder Citando
Antiguo 06-feb-2006, 19:19   #2 (permalink)
isis_eli ha deshabilitado el karma
 
Fecha de Ingreso: enero-2006
Mensajes: 14
Holas, soy muy nueva en programacion, pero se me ocurre que podrias clasificar tus productos en categorias, agregandole una columna categoria, y una tabla categorias que las linkee con un id. y despues si queres que se relacionen los productos pediselo desde el php con cual queres que se relacione, y de la base de datos le mandas un "SELECT * FROM productos WHERE categoria='$id' LIMIT 0,5". hasta le podrias incluir un random en algun lado para que los productos relacionados no sean siempre los mismos.

Saludos , espero k sirva...
Isis.
isis_eli está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 01:59.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93