J'ai lu sur l'indicateur de requête SQL Server 2008 OPTIMIZE for UNKNOWN. Je comprends comment cela fonctionne.Procédures stockées et OPTIMISER POUR INCONNU
Cependant, j'ai une question sur où et quand pour l'utiliser. Il ne peut pas être spécifié dans un fichier UDF. Il peut être spécifié à l'intérieur d'un proc stocké. Cependant, this états post blog MSDN ce qui suit:
4.Moving une requête dans une procédure stockée peut le mettre dans un séparé contexte procédural et peut être une bonne façon d'obtenir cette valeur visible à l'optimiseur (Remarque: cela fonctionne dans SQL 2000, ainsi)
cela me semble dire que tout paramètre passé à une procédure stockée sera « reniflé », aidant ainsi SQL Server pour compiler un plan d'exécution optimale. Cela implique que le plan mis en cache sera revisité/recompilé (pas sûr de ce mécanisme). Cependant, ceci est déroutant, car il annule tout le besoin d'OPTIMISER POUR INCONNU.
L'article MSDN sur les conseils de requête ne couvre pas ma question.
Quelqu'un peut-il répondre à cela pour moi, idéalement avec un pointeur vers quelque chose de Microsoft qui efface cela. Merci.
Merci @Ed. Ainsi, SQL Server "reniflera" les paramètres lors de la première exécution et mettra en cache le plan résultant, et il ne les reniflera pas après cela, économisant dans certaines conditions qu'il estime qu'un nouveau plan est justifié.Ai-je bien compris? – IamIC
@Ed cela efface pour moi, merci. Il me semble que l'on devrait presque toujours utiliser l'indice, sinon on reste à la merci du premier plan exécuté, qui peut être ou non proche de l'optimum. En fait, étant donné que les valeurs d'identité sont susceptibles d'être faibles sur une nouvelle base de données, il est presque certain que les recherches d'index seront ignorées dans le plan. – IamIC