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

Optimizar consulta Fulltext

Estas en el tema de Optimizar consulta Fulltext en el foro de Mysql en Foros del Web. Hola. Tengo un grave problema con las búsquedas en mi portal, tengo una base de datos con 400,000 registros (artículos) y al realizar una búsqueda ...
  #1 (permalink)  
Antiguo 28/08/2013, 06:58
 
Fecha de Ingreso: enero-2007
Mensajes: 27
Antigüedad: 17 años, 9 meses
Puntos: 1
Pregunta Optimizar consulta Fulltext

Hola.

Tengo un grave problema con las búsquedas en mi portal, tengo una base de datos con 400,000 registros (artículos) y al realizar una búsqueda con fulltext tarda 10 segundos o más bloqueando la base de datos. La consulta que hago ahora es, por ejemplo:

Código:
select u_id, u_titulo, u_url, u_report, u_fecha, u_votos, MATCH(u_titulo) AGAINST('Pink Floyd Breath') AS puntos from urls left join usuarios on u_usuario=us_id where MATCH(u_titulo) AGAINST('Pink Floyd Breath')  order by puntos desc, u_votos desc limit 0, 20
Me han comentado que usar LIKE es mucho más rápido, pero en mi caso no puedo, ya que el orden de las palabras no tendría que influir en los resultados.

Debo optimizar la consulta para que no sature el servidor pero por más que busque no encuentro cómo...

¿Alguien podría echarme una mano? Gracias!!
  #2 (permalink)  
Antiguo 28/08/2013, 08:04
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 9 meses
Puntos: 447
Respuesta: Optimizar consulta Fulltext

Hola natttt:

En realidad no hay mucho qué optimizar en tu consulta, pero revisa de cualquier manera algunos detalles:

1. La relación entre tus tablas realmente es opcional y necesitas un LEFT JOIN, o es mandatoria y en ese caso podrías utilizar un INNER JOIN.

2. revisa que tus campos suario y us_id estén definidos como índices.

3. la opción del LIKE podría servir, pero no tiene tantas ventajas en las búsquedas como lo tiene MATCH-AGAINST. podrías hacer una consulta así:

Código MySQL:
Ver original
  1.   u_id, u_titulo, u_url, u_report, u_fecha, u_votos
  2. FROM urls
  3. LEFT JOIN usuarios ON u_usuario = us_id
  4.   u_titulo LIKE '%Pink%' OR
  5.   u_titulo LIKE '%Floyd%' OR
  6.   u_titulo LIKE '%Breath%'
  7. ORDER BY u_votos DESC
  8. LIMIT 0, 20

Aunque aquí no podrías determinar qué resultado tiene mejor "puntuación" y de cualquier manera no te asegura que tenga mejores resultados que la consulta con MATCH-AGAINST... aun podrías mejorar esta consulta, por ejemplo cambiando los OR's por AND's, para traer sólo los títulos que contengan las tres palabras, independientes del orden... así como está, traería todos los títulos que contengan al menos una de las palabras.

Saludos
Leo.

Etiquetas: busqueda, busquedas, fulltext, match
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 00:57.