Améliorer les performances des requêtes en texte intégral

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

La liste suivante de recommandations peut vous aider à améliorer la performance des requêtes en texte intégral.

Des ressources matérielles telles que la mémoire, la vitesse du disque, la vitesse du processeur et l’architecture de la machine peuvent influencer la performance des requêtes en texte intégral.

  • Défragmentez l’index de la table de base à l’aide ALTER INDEX de REORGANIZE.

  • Réorganiser le catalogue de texte intégral à l’aide de ALTER FULLTEXT CATALOG REORGANIZE. Trop de fragments d’index en texte intégral peuvent entraîner une dégradation importante des performances des requêtes. Cette affirmation fusionne tous les fragments en un seul fragment plus grand par index, supprimant toute information sur les occurrences obsolètes. Assurez-vous d’exécuter cette instruction avant les tests de performance, car l’exécution de cette instruction provoque une fusion maîtresse des index intégraux de ce catalogue.

  • Limitez le choix de vos colonnes clés de texte intégral à une petite colonne. Bien qu’une colonne de 900 octets soit prise en charge, utilisez une colonne de clé plus petite dans un index en texte intégral. int et bigint offrent les meilleures performances.

  • L’utilisation d’une clé entière en texte intégral évite une jointure avec la table de mappage docid , ce qui améliore les performances des requêtes et de l’exploration. Des améliorations de performance supplémentaires sont possibles si la clé texte intégrale est également la clé index clusterée.

  • Combinez plusieurs prédicats CONTAINS en un seul CONTAINS prédicat. Dans SQL Server, vous pouvez spécifier une liste de colonnes dans la CONTAINS requête.

  • Si vous ne demandez que des informations de clé ou de rang en texte intégral, utilisez CONTAINSTABLE ou FREETEXTTABLE au lieu de CONTAINS ou FREETEXT, respectivement.

  • Pour limiter les résultats et augmenter la performance, utilisez le paramètre top_n_by_rank des FREETEXTTABLE fonctions et CONTAINSTABLE . top_n_by_rank vous permet de récupérer uniquement les résultats les plus pertinents. Utilisez ce paramètre uniquement si votre cas d’usage métier n’exige pas de retrouver toutes les correspondances possibles (autrement dit, s’il n’exige pas un rappel exhaustif).

    Remarque

    Le rappel total est généralement nécessaire pour les scénarios juridiques, mais peut être moins important que la performance pour des scénarios commerciaux tels qu’une e-business.

  • Vérifiez le plan de requête de texte intégral pour vous assurer que le plan de jointure adéquat a été sélectionné. Utilisez un indicateur de jointure ou un indicateur de requête si nécessaire. Si un paramètre est utilisé dans la requête de texte intégral, la valeur initiale du paramètre détermine le plan de requête. Vous pouvez utiliser l’indice OPTIMIZE FORde requête pour forcer la compilation de la requête avec la valeur que vous souhaitez. Il est ainsi possible d'obtenir un plan de requête déterministe et de meilleures performances.

  • Dans la recherche en texte intégral , les opérateurs logiques spécifiés dans CONTAINSTABLE (AND, OR) peuvent être implémentés en tant que jointures Transact-SQL ou bien dans des fonctions table de diffusion d’exécution de texte intégral (STVF). Typiquement, les requêtes avec un seul type d’opérateur logique sont implémentées uniquement par exécution en texte entier, tandis que les requêtes qui mélangent des opérateurs logiques possèdent également des jointures SQL. L'implémentation d'un opérateur logique dans la fonction table multi-diffusion d'exécution de texte intégral utilise quelques propriétés d'index spéciales qui la rendent beaucoup plus rapide que les jointures SQL. Pour cette raison, lorsque possible, cadrez vos requêtes en utilisant un seul type d’opérateur logique.

  • Pour les applications qui contiennent des prédicats relationnels sélectifs, les requêtes qui utilisent des prédicats relationnels sélectifs et des prédicats de recherche en texte intégral non sélectifs peuvent offrir de meilleures performances lorsqu’elles sont formulées de manière à utiliser l’optimiseur de requêtes. Cette approche permet à l’optimiseur de requête de déterminer s’il peut exploiter le prédicat ou le menu déroulant de plage pour produire un plan de requête effectif. Cette approche est plus simple et souvent plus efficace que l'indexation des données relationnelles comme données de texte intégral.

SQL Server 2008 Recherche en texte intégral : composants internes et améliorations