1

J'ai lu la théorie et les vues derrière l'option de plan de requête "OPTIMIZE FOR UNKNOWN" de SQL Server 2008. Je comprends ce qu'il fait assez bien. J'ai fait quelques expériences limitées et j'ai trouvé qu'avec un cache chaud, il était seulement utile sur des lignes de plus de 100k. Cependant, c'était sur une simple table et une requête sans jointures, filtrage, etc. Sur un cache froid, l'image serait sans doute beaucoup plus en sa faveur.Expérience avec quand utiliser OPTIMIZE FOR UNKNOWN

Je n'ai actuellement pas de système de production pour tester l'avant/après. Donc, je suis curieux de savoir si quelqu'un a fait avant/après les tests et fait des découvertes utiles quant à savoir exactement quand utiliser cette option et quand ne pas le faire.

UPDATE:

I a créé une table avec 3 cols, d'une PK à l'UID, et un index sur Col2 (int). Tout le traitement était contre Col2. Indiqué sont le nombre de lignes et de temps (DATEDIFF * 1000000):

Type  1,000 5,000 20,000 100,000 
Normal  0.3086 6.327 26.427 144.83, 141.126 
Recompile   117.59 584.837 
For Unknown 0.8101 6.52 26.89 143.788, 143.248 

Répondre

0

Vous l'utilisez lorsque vos données est suffisamment biaisée qu'un plan généré avec une valeur de paramètre serait tout à fait impropre à une autre valeur potentielle du paramètre. c'est-à-dire pour résoudre un problème de reniflage de paramètres.

Le reste de votre question ne semble pas particulièrement pertinent au but de l'OMI ou de l'OMI responsable.

+0

Je pourrais argumenter qu'un plan fait par "@UID = 1", qui provoquerait un balayage d'index, ne cherche pas, serait toujours mauvais pour "@UID = 100000". Les blogs de MSDN sont très vagues sur les meilleures pratiques, ne donnant que ce que vous dites ici. Le reste de la question met en évidence un scénario qui exacerbe la situation, si bien que l'OMI est très pertinente. – IamIC

+0

@IanC - Il est complètement impossible de répondre comme écrit. Le nombre de lignes ne signifie rien en soi sans le contexte d'un plan d'exécution. –

+0

Je comprends cela. Tout ce que je demande, ce sont des études de cas. Cela ressemble beaucoup à la question "fait de l'hyperthreading blessé ou aide SQL Server". Il n'y a pas de réponse "oui/non". La seule façon de trouver un type de réponse est d'étudier certaines études de cas et d'en déduire des modèles. Cela a été fait pour ce scénario et une conclusion a été atteinte. Cela pourrait être fait pour ce que je demande aussi. – IamIC