Résumé
Ajoutez le nouvel attribut de plan d’exécution de requête EstimateRowsWithoutRowGoal à la mise à jour cumulative 3 de SQL Server 2017 et au Microsoft SQL Server 2016 Service Pack 2 (SP2).
Lorsque l’optimiseur de requête estime le coût d’un plan d’exécution de requête, il suppose généralement que toutes les lignes qualifiantes de toutes les sources doivent être traitées. Toutefois, certaines requêtes entraînent l’optimiseur de requête à rechercher un plan qui renverra un plus petit nombre de lignes plus rapidement. Cela peut se produire si la requête utilise une clause TOP , un indicateur de requête FAST number_rows , une clause IN ou EXISTS ou une instruction SET ROWCOUNT { number | @number\_var } . Dans ce cas, l’optimiseur utilise un objectif de ligne lorsqu’il estime le plan de requête. Si le plan d’objectif de ligne est appliqué, le nombre estimé de lignes dans le plan d’exécution de la requête est réduit. Cela est dû au fait que le plan suppose qu’un plus petit nombre de lignes devra être traité pour atteindre l’objectif de ligne.
Remarque L’estimation effectuée à l’aide de l’objectif de ligne est approximative. Si la distribution réelle des données n’est pas uniforme, elle peut être inférieure au nombre réel de lignes à traiter. Par conséquent, il peut créer un plan de requête inefficace. Pour contourner ce problème, vous pouvez utiliser l’option de requête USE HINT (« DISABLE_OPTIMIZER_ROWGOAL ») ou l’indicateur de trace 4138.
Pour plus d’informations, consultez La mise à jour introduit l’argument d’indicateur de requête USE HINT dans SQL Server 2016. Toutefois, il peut être difficile d’identifier, dans des requêtes complexes, si un objectif de ligne est appliqué et dans quelle mesure il affecte le choix du plan.
À l’aide de l’attribut EstimateRowsWithoutRowGoal , vous pouvez comparer les résultats à ceux de l’attribut EstimateRows pour voir dans quelle mesure l’objectif de ligne affecte les estimations de l’optimiseur de requête.
Remarque Si l’objectif de ligne n’est pas appliqué à un opérateur de plan de requête particulier, cet attribut n’est pas inclus.
Informations supplémentaires
Cette mise à jour est incluse dans la mise à jour cumulative suivante pour SQL Server :
Mise à jour cumulative 3 pour SQL Server 2017
À propos des mises à jour cumulatives pour SQL Server :
Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et tous les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :
Dernière mise à jour cumulative pour SQL Server 2017
Informations sur les Service Packs pour SQL Server
Cette mise à jour est introduite dans les Service Packs suivants pour SQL Server :
Service Pack 2 pour SQL Server 2016
Service Pack 3 pour SQL Server 2014
À propos des Service Packs pour SQL Server :
Les Service Packs sont cumulatifs. Chaque nouvelle version contient tous les correctifs fournis dans les Service Packs précédents et tous les nouveaux correctifs. Il est recommandé d’appliquer le dernier Service Pack et la dernière mise à jour cumulative pour ce Service Pack. Il n'est donc pas nécessaire d'installer la version antérieure d'un Service Pack avant d'installer la dernière version disponible. Consultez le tableau 1 de l’article suivant pour trouver plus d’informations sur le dernier Service Pack et la dernière mise à jour cumulative.
Références
En savoir plus à propos de la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.