Buenas a todos!
Tengo un monstruito de query (MySQL) que se usa basicamente para un motor de búsqueda web, es decir, el tipico "input" en el que el usuario escribe una palabra, y se buscan todos los resultados posibles buscando dicha palabra en varios campos de diversas tamblas.
La query es algo como lo que sigue (lo pongo con letras y nombres sin importancia, pues es meramente ejemplificativa):
SELECT *
FROM aaa l
LEFT JOIN bbb ls ON(l.x = ls.x)
LEFT JOIN ccc s ON(ls.y = s.y)
LEFT JOIN ddd a ON(s.z = a.z)
LEFT JOIN eee ep ON(l.w = ep.ww OR l.w = ep.www)
LEFT JOIN fff p ON(ep.k = p.k)
WHERE l.a LIKE '%temp%' OR l.b LIKE '%temp%' OR l.c LIKE '%temp%' OR l.d LIKE '%temp%' OR l.e LIKE '%temp%' OR l.f LIKE '%temp%' OR l.g LIKE '%temp%' OR l.h LIKE '%temp%'
OR s.i LIKE '%temp%'
OR a.j LIKE '%temp%'
OR p.k LIKE '%temp%';
Necesito optimizar esto, porque directamente, ni acaba. No se ni cuanto dura, porque he tenido que pararlo.
Ya se evidentemente que eso dura la muerte, pues no hay indices, ni views ni nada. Así que este es el monstruo virgen, y hay que caparlo.
El primer paso que haré, es el de seleccionar específicamente los campos por contra de SELECT *.
Lo siguiente, seria crear un indice para cada uno de los campos que aparecen en el Where?
Y finalmente, crear una view de dicha query?
Los like, son una putada, pero no puedo prescindir de ellos. A no se que use algo tipo indices FULLTEXT y use luego MATCH...
Eso es lo que iba ha hacer... ¿que hariais vosotros? Que se os ocurre?
Muchas gracias,
Saludos!