概要
SQL Server 2017 累積更新プログラム 3 (CU3 以降で) および Microsoft SQL Server 2016 Service Pack 2 (SP2) に、新しい EstimateRowsWithoutRowGoal クエリ実行プラン属性を追加します。
クエリオプティマイザーは、クエリ実行プランのコストを推定するとき、通常、すべてのソースからのすべての修飾行を処理する必要があることを前提としています。 ただし、クエリによっては、クエリオプティマイザーによって、行数の少ないより小さい行数を返すプランが検索されることがあります。 この問題は、クエリでTOP句、 FAST number_rowsクエリヒント、 INまたはEXISTS句、またはSET ROWCOUNT {number | @number_var}ステートメントが使用されている場合に発生する可能性があります。 この場合、オプティマイザーは、クエリプランを推定するときに、行の目標を使用しています。 行の目標計画が適用されると、クエリ実行プランの行数の推定値が減少します。 これは、プランでは、行の目標に到達するために、少数の行を処理する必要があることを前提としているためです。
注: 行の目標を使用して行われた推定は概数です。 実際のデータ分布が一貫していない場合は、処理する必要がある実際の行数よりも小さい可能性があります。 そのため、効率の低いクエリプランを作成する可能性があります。 この問題の回避策として、 USE HINT (' DISABLE_OPTIMIZER_ROWGOAL ') クエリオプションまたはトレースフラグ4138を使うことができます。
詳細については、「 更新プログラムによる SQL Server 2016 の USE hint クエリヒント引数の概要」を参照してください。 ただし、行の目標が適用されているかどうか、およびプランの選択肢に影響を与えるかどうかを、複雑なクエリで識別することが難しい場合があります。
EstimateRowsWithoutRowGoal属性を使用することで、結果をEstimateRows属性の結果と比較して、クエリオプティマイザーの推定値がどの程度の目標に影響するかを確認できます。
注: 行の目標が特定のクエリプランの演算子に適用されていない場合、この属性は含まれません。
詳細情報
この更新プログラムは、SQL Server の次の累積的な更新プログラムに含まれています。
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
SQL Server の Service pack 情報
この更新プログラムは、SQL Server 用の次の service pack で導入されています。
サービスパックは累積されます。 Service Pack は累積的であり、 最新の Service Pack には新しい修正プログラムと共に、それ以前の Service Pack に含まれていたすべての修正プログラムが含まれています。 このサービスパックの最新の service pack と最新の累積的な更新プログラムを適用することをお勧めします。 最新の service pack をインストールする前に、以前のサービスパックをインストールする必要はありません。 最新の service pack と最新の累積的な更新プログラムの詳細については、次の記事の表1を参照してください。
参照情報
ソフトウェアの更新を説明するために Microsoft が使用する 用語について説明します。