Melhorar o desempenho das consultas em texto completo

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure

A lista seguinte de recomendações pode ajudá-lo a melhorar o desempenho das consultas em texto completo.

Recursos de hardware como memória, velocidade do disco, velocidade da CPU e arquitetura da máquina podem influenciar o desempenho das consultas em texto completo.

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

  • Reorganize o catálogo de texto integral utilizando ALTER FULLTEXT CATALOG REORGANIZE. Demasiados fragmentos de índice em texto completo podem levar a uma degradação substancial no desempenho das consultas. Esta afirmação funde todos os fragmentos num único fragmento maior por índice, removendo toda a informação de ocorrência obsoleta. Certifique-se de executar esta instrução antes dos testes de desempenho, porque executar esta instrução causa uma fusão mestre dos índices de texto completo desse catálogo.

  • Restrinja a escolha das colunas-chave de texto integral a uma coluna pequena. Embora seja suportada uma coluna de 900 bytes, use uma coluna de chave mais pequena num índice de texto completo. INT e BIGINT proporcionam o melhor desempenho.

  • Usar uma chave inteira em texto completo evita a junção com a tabela de mapeamento docid , o que melhora o desempenho das consultas e do rastreamento. Melhorias adicionais de desempenho são possíveis se a chave de texto completo for também a chave índice clusterizada.

  • Combine múltiplos predicados CONTAINS num único CONTAINS predicado. No SQL Server, pode especificar uma lista de colunas na CONTAINS consulta.

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

  • Para limitar os resultados e melhorar o desempenho, use o parâmetro top_n_by_rank das funções FREETEXTTABLE e CONTAINSTABLE. top_n_by_rank permite recuperar apenas os resultados mais relevantes. Use este parâmetro apenas se o seu cenário de negócio não necessitar de recordar todos os possíveis resultados (ou seja, não exigir uma recuperação total).

    Observação

    A revocação total é normalmente necessária em cenários legais, mas pode ser menos importante do que o desempenho para cenários empresariais, como o comércio eletrónico.

  • Verifique o plano de consulta em texto completo para garantir que o plano de junção adequado foi escolhido. Usa uma sugestão de junção ou de consulta, se necessário. Se um parâmetro for usado na consulta de texto completo, o valor de primeira vez do parâmetro determina o plano de consulta. Pode usar a OPTIMIZE FORsugestão de consulta para forçar a compilação da consulta com o valor pretendido. Isto ajuda a alcançar um plano de consulta determinístico e melhor desempenho.

  • Na pesquisa em texto completo, os operadores lógicos especificados em CONTAINSTABLE (AND, OR) podem ser implementados quer como associações (joins) Transact-SQL, quer no interior das funções com valor de tabela de transmissão (STVF) da execução de pesquisa em texto completo. Normalmente, consultas com apenas um tipo de operador lógico são implementadas puramente por execução em texto completo, enquanto consultas que misturam operadores lógicos também possuem joins SQL. A implementação de um operador lógico dentro da execução de texto completo STVF utiliza algumas propriedades especiais de índice que o tornam muito mais rápido do que as junções SQL. Por esta razão, sempre que possível, enquadre as suas consultas usando apenas um tipo de operador lógico.

  • Para aplicações que contêm predicados relacionais seletivos, 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 consultas. Esta abordagem permite ao otimizador de consultas decidir se pode explorar o pushdown de predicados ou de intervalos para produzir um plano de consulta eficaz. Esta abordagem é mais simples e frequentemente mais eficiente do que indexar dados relacionais como dados de texto completo.

Pesquisa de texto completo do SQL Server 2008: internos e aprimoramentos