Ajuste de desempenho e otimização de consultas de texto completo

O desempenho das consultas de texto completo é influenciado por recursos de hardware, como memória, velocidade de disco, velocidade da CPU, e pela arquitetura do computador.

Recomendações para aumentar o desempenho de consultas de texto completo

A lista a seguir apresenta recomendações que ajudarão a aumentar o desempenho de consultas de texto completo:

  • Desfragmente o índice da tabela base usando ALTER INDEX REORGANIZE.

  • Reorganize o catálogo de texto completo usando ALTER FULLTEXT CATALOG REORGANIZE. Faça isso antes de testar o desempenho, pois a execução dessa instrução provoca uma mesclagem mestra dos índices de texto completo desse catálogo.

  • Restrinja suas opções de colunas de chave de texto completo a uma coluna pequena. Embora haja suporte para uma coluna de 900 bytes, é recomendável usar uma coluna de chave menor em um índice de texto completo. int e bigint proporcionam o melhor desempenho.

  • O uso de uma chave de texto completo de inteiro evita uma junção com a tabela de mapeamento docid. Portanto, uma chave de texto completo de inteiro melhora o desempenho de consultas consideravelmente e aprimora o desempenho de rastreamento. Outros benefícios de desempenho poderão ser obtidos se a chave de texto completo também for a chave de índice clusterizado. Para obter mais informações, consulte Estrutura de índice de texto completo e Como perguntar sobre a coluna de chave de texto completo (Transact-SQL).

  • Combine vários predicados CONTAINS em um único predicado CONTAINS. No SQL Server, você pode especificar uma lista de colunas na consulta CONTAINS.

  • Se você só precisar de informações de classificação ou de chave de texto completo, use CONTAINSTABLE ou FREETEXTTABLE em vez de CONTAINS ou FREETEXT, respectivamente.

  • Para limitar os resultados e aumentar o desempenho, use o parâmetro top_n_by_rank das funções FREETEXTTABLE e CONTAINSTABLE. top_n_by_rank permite recuperar somente os acertos mais relevantes. Use este parâmetro apenas se o seu cenário comercial não exige a recuperação de todos os acertos possíveis (isto é, não exige a recuperação total).

    ObservaçãoObservação

    A recuperação total geralmente só é necessária em cenários legais, mas pode ser menos importante do que o desempenho em cenários comerciais, como e-business.

  • Verifique o plano de consulta de texto completo para assegurar que o plano de junção apropriado foi escolhido. Use uma dica de junção ou de consulta se necessário. Se um parâmetro for usado na consulta de texto completo, o valor inicial do parâmetro determinará o plano de consulta. Você pode usar a dica de consulta OPTIMIZE FOR para forçar a consulta a ser compilada com o valor desejado. Isso ajuda a conseguir um plano de consulta determinista e melhor desempenho.

  • Um número excessivo de fragmentos de índice de texto completo no índice de texto completo pode levar a uma diminuição considerável do desempenho de consulta. Para diminuir a quantidade de fragmentos, reorganize o catálogo de texto completo usando a opção REORGANIZE da instrução Transact-SQLALTER FULLTEXT CATALOG. Essa instrução basicamente mescla todos os fragmentos em um único fragmento maior e remove todas as entradas obsoletas do índice de texto completo.

  • Na pesquisa de texto completo do SQL Server 2008, os operadores lógicos especificados em CONTAINSTABLE (AND, OR) podem ser implementados como junções SQL ou nas STVF (funções com valor de tabela de fluxo) de execução de texto completo. Em geral, as consultas que têm apenas um tipo de operadores lógicos são implementadas meramente por execução de texto completo, enquanto as consultas que combinam operadores lógicos também possuem junções SQL. A implementação de um operador lógico dentro da STVF de execução de texto completo usa algumas propriedades de índice especiais que a tornam bem mais rápida do que as junções SQL. Por isso, é recomendável que, quando possível, você forme as consultas usando um único tipo de operador lógico.

  • Para aplicativos que contêm afirmações de relação seletiva, as consultas que usam predicados relacionais seletivos e predicados de texto completo não seletivos podem ter melhor desempenho quando escritas para usar o otimizador de consulta. Dessa forma, o otimizador de consulta pode decidir se poderá explorar o predicado ou a aplicação de intervalo para gerar um plano de consulta eficaz. Esta abordagem é mais simples e geralmente mais eficiente do que a indexação de dados relacionais como dados de texto completo.

Exibindo o resultado da geração de tokens de uma combinação de separador de palavras, dicionário de sinônimos e lista de palavras irrelevantes (stoplist)

Depois de aplicar uma determinada combinação de separador de palavras, dicionário de sinônimos e lista de palavras irrelevantes a uma entrada de cadeia de caracteres de consulta, você pode exibir o resultado da geração de tokens usando a exibição de gerenciamento dinâmico sys.dm_fts_parser. Para obter mais informações, consulte sys.dm_fts_parser (Transact-SQL).