2011-07-14 10 views
6

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!

+0

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

+0

Debería haber dicho que es rápido incluso para consultas diferentes (con diferentes resultados) de la consulta lenta original. – Paul

Respuesta

6

De forma predeterminada, SQL Server descarga el separador de palabras después de un cierto período de inactividad (300 segundos, AFAIR).

Recargarlo requiere verificar la firma que requiere una solicitud de Internet al emisor del certificado.

Por favor, ejecute esto en el servidor dev:

EXEC sp_fulltext_service 
       @action = 'verify_signature', 
       @value = 0 

y ver si ayuda.

Actualización:

http://support.microsoft.com/kb/915850/en-us

+0

Perfecto, gracias :-) – Paul

0

Quizás su base de datos esté configurada para cerrarse automáticamente.

+0

No, autoclose está desactivado – Paul

0

es el servidor muy ocupado o tenga memoria suficiente? No sé mucho sobre cómo funciona la búsqueda de texto completo, pero podría estar vaciando cosas en el disco si hay mucha actividad en el servidor.

Cuestiones relacionadas