Disons que nous avons une base de données de 12 millions de noms et adresses qui doivent être consultables en texte intégral, mais chaque ligne contient également une valeur entière, disons COMPANYID
. Le tableau contient environ 250 COMPANYID distincts sur ces 12 millions de lignes.
Est-il possible, lors de la définition des indices de texte intégral, de donner à chacun COMPANY
sa propre "branche" dans l'arborescence?
company
jusqu'à présent, et tout le monde l'a tellement aimé qu'ils veulent que je la mette en production pour toutes les entreprises, et je n'ai pas eu la possibilité de créer une maquette avec 12 millions de lignes de données factices significatives encore. Les valeurs comme "Lastname1", "Lastname2", "City1", etc. n'auront pas assez de variation et pourraient fausser les résultats du test. Les données changent si fréquemment que je ne suis pas sûr que SQL Server saura de manière fiable quel index est le plus étroit dans une requête donnée, et le nombre de lignes par entreprise varie considérablement. Une entreprise peut n'avoir que 1 000 lignes, 60 000 autres.Réponses:
Non, c'est la réponse courte, et vous n'en avez pas vraiment besoin. Les index de texte intégral sont des index inversés de sorte qu'ils stockent les mots fractionnés par le doc_id unique que vous devez spécifier lorsque vous créez l'index de texte intégral. Il doit s'agir d'une "colonne unique, à clé unique, non nullable", idéalement un entier. Ce qui est essentiellement une clé étrangère ne figure pas et il n'y a pas de moyen facile de les partitionner sur cette base.
Vous pouvez usurper quelque chose comme ça avec une table par entreprise et un index de texte intégral par table. Vous auriez besoin d'une sorte de logique de code placée devant pour déterminer la table à insérer / récupérer. Ce serait un casse-tête considérable à gérer, ce n'est certainement pas la peine.
Si vous aviez un volume important (par exemple, plus de 23 milliards d'enregistrements), vous pourriez envisager une solution de partage, par exemple quelque chose comme une machine virtuelle Azure par entreprise avec une application assise devant eux pour déterminer à quelle machine se connecter. Mais vous n'avez clairement pas besoin de cela non plus.
Il y a également eu un certain nombre d'améliorations dans SQL 2008 au texte intégral qui est maintenant plus intégré dans le moteur de base de données. Un scénario, dans lequel vous spécifiez une clause WHERE par rapport à une colonne normale et utilisez les fonctions de texte intégral, est appelé «requête mixte» et décrit ici . Il s'agit toujours d'un excellent article même si les informations concernent SQL 2008.
Si vous êtes généralement préoccupé par les performances et les plans, pourquoi ne pas faire tourner certaines données de test, introduire un biais et l'essayer. J'ai assimilé ce script avec environ 2 millions de lignes en quelques minutes:
la source