オプティマイザー SQL Server 2014、2016、2017 で追加クエリの実行プランの目標については行

適用対象: SQL Server 2016 StandardSQL Server 2016 DeveloperSQL Server 2016 Enterprise

概要


SQL Server 2017 累積的な更新プログラム 3 (CU3) と Microsoft SQL Server 2016 Service Pack 2 (SP2) するには、 EstimateRowsWithoutRowGoalクエリの実行プランの新しい属性を追加します。

クエリ オプティマイザーがクエリの実行プランのコストを予測するときは、通常すべてのソースからのすべての条件を満たす行を処理する必要があることと仮定します。 ただし、いくつかのクエリには、返される行の数を減らして高速化計画を検索するクエリ オプティマイザーがあります。 これが発生する最上位の句、高速の number_rowsクエリ ヒント、 INまたはEXISTS句では、クエリを使用してまたは a SET ROWCOUNT {番号 | @number_var}ステートメントです。 この例では、オプティマイザーは、クエリ プランを推定するときに、行の目標を使用しています。 行目標計画を適用すると、クエリの実行プラン内の行の推定数が減少します。 これは、計画は、少ない数の行が行目標に到達するために処理する必要があるためにです。

注: これらの確認手順は、Windows クライアントにのみ適用されます。 見積行の目標を使用して行われますが、おおよそです。 実際のデータの分布が一様でない場合は、処理する必要のある行の実際の数よりも少ないをある可能性があります。 ため、効率の悪いクエリ プランを作成するでした。 この問題の回避策としては、クエリ オプションを使用してヒント ('DISABLE_OPTIMIZER_ROWGOAL')またはトレース フラグ 4138 を使用できます。

詳細については、 2016 の SQL Server でクエリ ヒント引数を使用のヒントを紹介する更新プログラムを参照してください。 可能性がありますただし、複合型の識別が困難になる行目標を適用するかどうか、どの程度に影響を与える、実行プランが選択クエリを実行します。

EstimateRowsWithoutRowGoal属性を使用すると、目的の行がクエリ オプティマイザーの推定値にどのように影響する量を表示するEstimateRows属性の結果を比較できます。

注: これらの確認手順は、Windows クライアントにのみ適用されます。 行の目標は、特定のクエリ プランの操作には適用されません、する場合はこの属性は含まれません。

詳細情報


この更新プログラムは SQL Server の次の累積的な更新プログラムに含まれています。

SQL Server 2017 の累積的な更新プログラム 3

SQL Server のサービス パックの情報

この更新プログラムは SQL Server の次の service pack で導入されています。

       2016 の SQL Server のサービス パック 2

       2014 の SQL Server のサービス パック 3

関連情報


Microsoft がソフトウェア更新プログラムを説明するために使用される用語について説明します。