He decidido cambiar una búsqueda utilizando LIKE '%' + @searchTerm + '%'
para usar un índice FULLTEXT. Estoy usando SQL Server 2005.Retraso en el uso de la búsqueda de texto completo en SQL Server
He creado un catálogo, así:
CREATE FULLTEXT CATALOG CatalogName AS DEFAULT
He creado el índice, así:
CREATE FULLTEXT INDEX ON Table (col1, col2) KEY INDEX TablePK WITH CHANGE_TRACKING AUTO
Y entonces yo uso que de este modo:
SELECT col1, col2
FROM Table t
INNER JOIN FREETEXTTABLE(Table, *, @SearchTerm) s ON s.[Key] = t.Id
ORDER BY s.[Rank] DESC
devuelve los resultados correctos, pero se tarda unos 30 segundos para ejecutar la búsqueda si no se ha ejecutado durante un tiempo . Después de ejecutarse una vez, todas las búsquedas posteriores son instantáneas. Si lo dejo solo y regreso en una hora, la primera búsqueda es lenta de nuevo. Parece suceder incluso si la tabla no se actualiza mientras tanto.
He intentado esto en dos bases de datos completamente diferentes, en servidores completamente diferentes, y el comportamiento es el mismo. En una de estas bases de datos, la tabla que se indexa es muy pequeña (50 filas), y en el otro es un poco más grande (1000 filas).
¿Alguien me puede ayudar a resolver cuál es el problema y cómo solucionarlo? ¡Mi única alternativa es abandonar FULLTEXT por completo o realizar un servicio para ejecutar la consulta de búsqueda cada n minutos!
SQL-server almacena en caché los resultados después de la primera ejecución. Algo está invalidando la memoria caché después de que haya transcurrido x tiempo. – Johan
Debería haber dicho que es rápido incluso para consultas diferentes (con diferentes resultados) de la consulta lenta original. – Paul