Quelles sont les principales différences entre l'OPTION(OPTIMISER POUR les INCONNUS) et OPTION(RECOMPILER)?

- Je exécuter dans le classique La Détection Des Paramètres problèmes de SQL Server 2012. Basé sur quelques recherches, j'ai trouvé plusieurs options autour de ce problème. Les deux options que j'ai besoin de comprendre la différence entre sont OPTION(OPTIMIZE FOR UNKNOWN) vs OPTION(RECOMPILE).

Je suis hésitant pas à utiliser OPTION(RECOMPILE) à la fin de mes requêtes qui ont ce problème, car cela oblige le serveur pour générer un nouveau plan d'exécution à chaque fois. Si je l'appelle, cette requête est souvent monter le CPU de la machine.

Donc que j'utilise il meilleure solution disponible, quelles sont les réelles différences entre les deux options?

Sera OPTION(OPTIMIZE FOR UNKNOWN) réutilisation de cache au lieu de les recompiler à chaque fois?

  • Comment complexe sont vos questions? Vous ne voulez pas de recompiler des requêtes dans un environnement transactionnel si vous vous attendez à eux de remplir en une fraction de seconde. Mais si elles sont plus de requêtes, puis les frais généraux pour les recompiler est probablement négligeable par rapport à l'exécution réelle.
  • Ma compréhension est que OPTIMIZE FOR UNKNOWN s'applique au moment de la compilation de la requête. Il raconte l'optimiseur d'ignorer les valeurs de paramètre spécifiques et l'utilisation de ses statistiques pour générer le plan. La résultante de plan de mise en cache et pas recompilé.
  • Je ne suis pas de l'utiliser dans une transaction. C'est un rapport qui a pour exécuter souvent. Il a environ 10 left join et 1 inner join. La requête elle-même n'est pas compliqué.
  • alors, est-il juste de dire que le OPTION(RECMPILE) recompilé à chaque fois où OPTION(OPTIMIZE FOR UNKNOWN) compile à la fois à l'aide de UNKNOW? donc OPTION(OPTIMIZE FOR UNKNOWN) est moins cher dans le cas?
  • Je n'ai pas testé, mais c'est ma compréhension, oui. Toutefois, si le plan de requête n'est pas très bon pour le cas particulier que vous allez utiliser, vous pourriez être mieux avec l'option de recompilation. Parfois, il est évident à partir du plan de requête de savoir si cela fonctionne pour vous ou pas dans votre cas d'utilisation. Si elles ne sont pas évidentes, vous pouvez faire des repères. Recompiler option est cher, mais inefficace des requêtes peut être encore plus coûteux.
InformationsquelleAutor Junior | 2016-11-04