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