Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Optimizar búsqueda en varias tablas

Estas en el tema de Optimizar búsqueda en varias tablas en el foro de Mysql en Foros del Web. Bueno, a ver si me dan luz... Tengo esta consulta... @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT m . marca , pf . precio , ...
  #1 (permalink)  
Antiguo 19/04/2014, 14:50
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 5 meses
Puntos: 175
Optimizar búsqueda en varias tablas

Bueno, a ver si me dan luz...

Tengo esta consulta...

Código SQL:
Ver original
  1. SELECT m.marca, pf.precio, p.productoDisponible, e.nombreEmpresa, c.clasificacion  
  2. FROM productosDisponibles AS p
  3. INNER JOIN productosPerfil AS pf
  4. ON p.idproductos=pf.idproductos
  5. INNER JOIN empresas AS e
  6. ON pf.idempresas=e.idempresas
  7. INNER JOIN clasificacion AS c
  8. ON p.idclasificacion=c.idclasificacion
  9. INNER JOIN marcas AS m
  10. ON p.idmarcas=m.idmarcas
  11. WHERE LOWER(CONCAT(p.producto,' ',e.nombre,' ',m.marca,' ',c.clasificacion)) LIKE '%LA-VARIABLE%'

Busco en varias tablas, que en algún momento se relacionan entre si, a veces directa, otras indirectamente... mi consulta es... estoy optimizando la consulta para que no me ocupe mucha memoria, o habría otra forma mas sencilla?

El modelo de BD esta aqui: http://subefotos.com/ver/?7128f0427b...1c788a099o.png

OBS: de repente algunos nombre de tablas o columnas estan alterados, pero para el efecto son lo mismo, es decir, les puse algun guin bajo, o solo en mayuscula, espero se entienda.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Última edición por loncho_rojas; 19/04/2014 a las 14:57
  #2 (permalink)  
Antiguo 19/04/2014, 15:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Optimizar búsqueda en varias tablas

Bueno, por lo pronto, condiciones de este tipo son terriblemente ineficientes, asesinas de performance:
Código MySQL:
Ver original
  1. WHERE LOWER(CONCAT(p.producto,' ',e.nombre,' ',m.marca,' ',c.clasificacion)) LIKE '%LA-VARIABLE%'
porque realizas la búsqueda realizando un full table scan sobre una tabla derivada (la tabla resultado).
Para búsquedas de ese tipo yo francamente te sugeriría usar stored procedures, tablas temporary, y eventualmente MyISAM para poder utilizar indices FULLTEXT.
Si quieres ver cuál es el esfuerzo de MySQL, usa EXPLAIN sobre esa consulta, en tu propia base (se requiere el acceso a las tablas y con datos para usarlo), y sobre la base del resultado podrás ver qué te conviene mejorar, indexar.
Lo que no se recomienda jamás es hacer un "buscatodo en todo", por más que parezca una buena idea. Hacer 5 queries consecutivas puede ser más eficiente qmue una "superconsulta" que lo busque todo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 19/04/2014, 16:25
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 5 meses
Puntos: 175
Respuesta: Optimizar búsqueda en varias tablas

MM, entiendo lo de la tabla derivada, si creo que haria una búsqueda tonta en esa tabla, ya que la que necesito es la intermedia, en este caso la de PRODUCTOSperfil, ya que productosDisponibles es una tabla invariable, de donde el user sacaría los productos para introducirlos a su perfil, y solo me interesa que busque los productos existentes en el perfil... por lo otro, emm, no se, un indice FULL TEXT no se si se me serviria para lo que quiero, nunca use MATCH AGAINST para varias tablas... solo necesito que encuentre, una empresa, o un producto, o una marca, o una categoria específica, solo si se ha cargado por un usuario, por ello lo hice asi... de todas maneras me parece interesante lo que dices, Me das un ejemplillo, asi puedo asimilarlo un poco mas..

Ya cree un post anterior, donde trataba de explicar, pero lo repito.

Un user se registra.

Luego puede crear 1-2 X empresas... le carga los datos a su empresa.

Luego puede cargarle productos, pero solo los productos predeterminados que ya fueron cargados en productosDisponibles (ver la imagen del modelo)

Los usuarios comunes, solo deberían buscar X producto, o empresa, o lo que ya explique arriba, esa es la idea...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Última edición por loncho_rojas; 19/04/2014 a las 16:37

Etiquetas: join, select, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:37.