Buenas soy nuevo en este foro, y estoy algo desesperado tengo una query que no se por donde agarrarla es algo compleja
La query en questión:
SELECT a.id,a.patrocinado1,a.patrocinado2, a.foto_main,a.nombre,a.descript,a.precio,a.modificado,a.filter_9, round( sqrt( ( ( a.filter_11 - 41.6046744) * (a.filter_11 - 41.6046744 ) * 69.1 * 69.1 ) + ( (a.filter_12 - 2.1892674 ) *(a.filter_12 - 2.1892674 ) * 53 * 53 ) ) ) as distance,+(MATCH (a.keywords_busqueda) AGAINST ('+iphone +1' IN BOOLEAN MODE)) +IF(a.nombre like '%iphone 1%',220,0) +IF(a.patrocinado1 IS NOT NULL || a.patrocinado2 IS NOT NULL,100,0)+IF(a.id_usuario < 100 ,-5,0)+IF(a.id_subcategoria = 15 ,-15,0) as rank
FROM anuncios a
INNER JOIN anuncios a_geo ON a_geo.id = a.id
INNER JOIN usuarios u ON a_geo.id_usuario = u.id
WHERE 1
AND (MATCH (a.keywords_busqueda) AGAINST ('iphone 1 ' IN BOOLEAN MODE))
AND a_geo.id_categoria !=321
AND a_geo.id_subcategoria!=330
AND a.id != 9
HAVING rank > 0
ORDER BY IF(distance <= 15 ,1,0) desc, IF(distance <= 30 ,1,0) desc, IF(distance <= 45 ,1,0) desc,IF(distance <= 90 ,1,0) desc,rank desc,u.tienda asc, a_geo.modificado desc limit 0,30
Os adjunto el explain,
esta query suele tardar unos 7segundos una barbaridad,
el ft_min_length está seteado a 1 en el my.cnf y uso Amazon RDS con una máquina muy potente
Si la búsqueda se cambia a palabras con más de un cáracter el comportamiento es bastante bueno (0.1s a 0.5s)