Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Optimiser la recherche en texte intégral sur plusieurs tables

Il s'agit d'un problème difficile, car CONTAINSTABLE ne peut rechercher qu'un seul index FTS de table à la fois. Votre solution UNION ci-dessus convient tant que vos performances sont acceptables.

Nous avons été confrontés au même problème de devoir rechercher efficacement de nombreuses colonnes dans de nombreuses tables en une seule requête. Ce que nous avons fait, c'est agréger toutes les données de ces colonnes et tables dans une seule table en lecture seule. Notre requête n'avait alors besoin que d'un seul appel CONTAINSTABLE

 CONTAINSTABLE(AggregatedTable, AggregatedColumn, @FtsQuery)

Nous avons une tâche planifiée qui s'exécute toutes les 5 à 10 minutes et agrège de manière incrémentielle tout contenu modifié de notre table source dans notre table de contenu agrégé unique en lecture seule.

En général, il semble que l'utilisation de FTS dans n'importe quelle base de données et charge utilisateur de taille raisonnable signifie que vous êtes toujours aux prises avec des performances. Si vous trouvez que peu importe ce que vous faites, vous ne pouvez pas obtenir des performances acceptables, vous devrez peut-être étudier d'autres technologies telles que Lucène .