Scénario:T-SQL service d'indexation optimisation SQL openquery
J'utilise un proc (SQL Server Management Studio) stockées T-SQL pour retourner la recherche correspondant à des documents texte à l'aide du service d'indexation MS et ce (simplifié) query:
SELECT *
FROM openquery(
filesystem2,
'SELECT
Path, Rank, Filename
FROM
SCOPE('' "e:\test\documents" '')
WHERE
CONTAINS('' FORMSOF (INFLECTIONAL, "test") '')
') b
Cette requête a cessé de fonctionner correctement il y a quelques jours. Bien que n'étant pas entièrement justifié, il semble que l'interaction entre le cache de propriété et l'index principal ne fonctionne pas correctement car je peux trouver les documents désirés soit par:
1) en supprimant le paramètre SCOPE (c'est-à-dire en utilisant simplement "FROM SCOPE" () » comme la clause FROM
2) éliminer la clause WHERE (et en gardant la fonction SCOPE comme est)
Alors, je peux « trouver » les documents souhaités par tout contenu ou en tout lieu, mais pas par utilisant les deux ensemble.
Une option serait de réindexer le catalogue, mais la réindexation n'est, pour l'instant, qu'une option de dernier recours.
Cela étant dit, je réécrit la requête pour exclure la portée spécifiée et comprennent une somme supplémentaire de la clause WHERE:
SELECT *
FROM openquery(
filesystem2,
'SELECT
Path, Rank, Filename
FROM
SCOPE()
WHERE
CONTAINS('' FORMSOF (INFLECTIONAL, "test") '') and
Path like ''%e:\test\documents%''
') b
Cette requête renvoie les documents appropriés lors de la recherche. Cependant, j'étais préoccupé par un impact potentiel sur les performances utilisant le mot-clé LIKE. Donc, j'ai étudié le plan d'exécution de chaque requête, mais ils étaient exactement les mêmes ... ce qui me dit 1 de deux choses:
1) le composant de requête du service d'indexation optimise les deux requêtes de manière à les rendre égal.
2) L'analyseur de requêtes ne fournit pas de retour précis pour les requêtes distantes lorsqu'aucune table DB n'est référencée.
Questions (sans ordre particulier). Quelqu'un a-t-il un aperçu de ce qui suit?:
1) Qu'est-ce qui pourrait causer le comportement du problème original entre le cache de propriétés et l'index principal décrit dans le scénario ci-dessus?
2) En ce qui concerne le plan d'exécution,
a) Would the Querying Component process/optimize both queries the same?
b) Can Sql Server Management Studio provide execution plan feedback for openquery queries that do not reference any DB tables?
3) Enfin, Quelle requête est plus efficace/plus rapide, et pourquoi?
a) i.e. should I use the second one because it solves my problem?
Merci!
Merci pour la perspicacité. Je me suis un peu fié aux requêtes en utilisant vos suggestions ... et j'ai décidé d'aller de l'avant et d'utiliser la solution. – dda