Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/06/2009, 14:15
Linit
 
Fecha de Ingreso: diciembre-2002
Mensajes: 144
Antigüedad: 21 años, 5 meses
Puntos: 1
Optimizar Sql para buscador

un saludo cordial a todos.

La presente es para ver si me pueden hechar una manita, estoy realizando un buscador para mi web. tengo noticias desde el 2002 hasta la presente, deseo buscar por ante-titulo, titulo, Sumario y la noticia, hay muchas noticias unas 200 mil distribuida por años 2002,2003,2004 etc...... y en promedio de unos mil caracteres cada una.

Bueno estoy utilizando un match against para cuando tenga mas de 2 palabras y un like para una palabra. Las BD son mysql.

El index fulltex lo cree de la siguiente manera

ALTER TABLE n2002 ADD FULLTEXT(Ante-Titulo, Titulo, Sumario, nota); para cada tabla.

Bueno la cuestion cuando busco en una sola base de datos busca rapido pero cuando busco en todas las base de datos se vuelve muy lento de hecho excede los 30 seg disponible para el script en la configuracion del servidor.

Eso aplica para amba sql. Es por esto que las colocos aqui haber como puedo optimizar la sql, Yo utilizo UNION pero no se si se puede hacer de otra manera mas eficiente.

La MATCH AGAINST

(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2002 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2003 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2004 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2005 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2006 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2007 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2008 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2009 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) ORDER BY Score DESC LIMIT 150

LA LIKE

(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2002 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2003 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2004 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2005 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2006 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2007 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2008 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2009 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') ORDER BY Fecha DESC LIMIT 150


un saludo y esperandio ayuda. La idea es como agilizar en lo posible los resultados.