Ajuste y optimización del rendimiento de consultas de texto completo

El rendimiento de las consultas de texto completo se ve afectado por los recursos de hardware, como la memoria, la velocidad de disco y de CPU, y la arquitectura del equipo.

Recomendaciones para aumentar el rendimiento de las consultas de texto completo

A continuación se ofrece una lista de recomendaciones que permitirán aumentar el rendimiento de las consultas de texto:

  • Desfragmente el índice de la tabla base mediante ALTER INDEX REORGANIZE.

  • Reorganice el catálogo de texto mediante ALTER FULLTEXT CATALOG REORGANIZE. Asegúrese de hacerlo antes de realizar pruebas de rendimiento porque la ejecución de esta instrucción produce una mezcla maestra de los índices de texto del catálogo.

  • Limite la selección de columnas de clave de texto completo a una columna pequeña. Aunque se admite una columna de 900 bytes, recomendamos utilizar una columna de clave menor en un índice de texto completo. int y bigint proporcionan el máximo rendimiento.

  • Al utilizar una clave de texto completo de un tipo entero, se evita una combinación con la tabla de asignación de docid. Por consiguiente, este tipo de clave mejora el rendimiento de las consultas en un orden de magnitud y mejora el rendimiento del rastreo. Podrían producirse ventajas adicionales en el rendimiento si la clave de texto completo también es la del índice clúster. Para obtener más información, vea Estructura de los índices de texto completo y Cómo consultar sobre la columna de clave de texto completo (Transact-SQL).

  • Combine varios predicados CONTAINS en un predicado CONTAINS. En SQL Server puede especificar una lista de columnas en la consulta CONTAINS.

  • Si sólo necesita información de clave de texto completo o de clasificación, utilice CONTAINSTABLE o FREETEXTTABLE en lugar de CONTAINS o FREETEXT, respectivamente.

  • Para limitar los resultados y aumentar el rendimiento, utilice el parámetro top_n_by_rank de las funciones CONTAINSTABLE y FREETEXTTABLE. top_n_by_rank permite volver a recuperar sólo las coincidencias más relevantes. Utilice este parámetro únicamente si su escenario empresarial no requiere recuperar todas las coincidencias posibles (es decir, no requiere recuperación total).

    Nota

    La recuperación total suele ser necesaria en escenarios legales, pero puede ser menos importante que el rendimiento en escenarios empresariales como un sistema de comercio electrónico.

  • Compruebe el plan de consultas de texto completo para asegurarse de que se selecciona el plan de combinaciones adecuado. Use una sugerencia de combinación o una sugerencia de consulta si es necesario. Si se usa un parámetro en la consulta de texto, el valor de primera vez del parámetro determina el plan de consultas. Puede usar la sugerencia de consulta OPTIMIZE FOR para hacer que la consulta realice la compilación con el valor deseado. Así se contribuye a lograr un plan de consultas determinista y un mejor rendimiento.

  • Demasiados fragmentos del índice de texto completo pueden conducir a una degradación sustancial del rendimiento de las consultas. Para reducir el número de fragmentos, reorganice el catálogo de texto completo utilizando la opción REORGANIZE de la instrucción ALTER FULLTEXT CATÁLOGOTransact-SQL. Esencialmente, esta instrucción combina todos los fragmentos en un único fragmento mayor y quita todas las entradas obsoletas del índice de texto completo.

  • En la búsqueda de texto completo de SQL Server 2008, los operadores lógicos especificados en CONTAINSTABLE (AND, OR) se pueden implementar bien como combinaciones de SQL o dentro de las funciones con valores de tabla de transmisión por secuencias (STVF) de ejecución de texto completo. Normalmente, las consultas con sólo un tipo de operadores lógicos se implementan meramente mediante la ejecución de texto completo, mientras que las consultas que mezclan operadores lógicos también presentan combinaciones de SQL. La implementación de un operador lógico dentro de la STVF de ejecución de texto completo utiliza algunas propiedades de índice especiales que hacen que sean mucho más rápidas que las combinaciones de SQL. Por esta razón, recomendamos que, siempre que sea posible, cree las consultas utilizando únicamente un tipo de operador lógico.

  • Con las aplicaciones que contienen predicados de relación selectiva, las consultas que usan predicados relacionales selectivos y predicados de texto completo no selectivos podrían demostrar un mejor comportamiento cuando se escriben para utilizar el optimizador de consultas. Esto permite al optimizador de consultas decidir si puede explotar el predicado o una pila de intervalo para generar un plan de consulta efectivo. Este enfoque es más sencillo y a menudo más eficaz que indizar los datos relacionales como datos de texto completo.

Ver el resultado de la tokenización de una combinación entre un separador de palabras, un diccionario de sinónimos y una lista de palabras irrelevantes

Después de aplicar una combinación de separador de palabras determinado, diccionario de sinónimos y lista de palabras irrelevantes a la entrada de una cadena de consulta, puede ver el resultado de la tokenización utilizando la vista de administración dinámica sys.dm_fts_parser. Para obtener más información, vea sys.dm_fts_parser (Transact-SQL).