ホームページ >データベース >mysql チュートリアル >NULL パラメータを使用してもストアド プロシージャでパフォーマンスの問題が発生するのはなぜですか?それを修正するにはどうすればよいですか?
パラメータ スニッフィングとストアド プロシージャの実行プランのパフォーマンス
ストアド プロシージャは、@MyDate を NULL として実行すると、パフォーマンスの問題が発生します。生成された実行計画は最適ではありません。この問題は、@MyDate が実際に NULL であるか、IF ステートメントによって現在のタイムスタンプに設定されているかに関係なく発生します。
問題の実行プランは、SQL Server が次のパラメータに基づいてストアド プロシージャをコンパイルするパラメータ スニッフィングによって引き起こされると考えられています。コンパイル時に指定されたパラメータ値。ただし、この場合、パラメータが NULL の場合でも問題が発生し、一般的なパラメータ スニッフィング シナリオと矛盾します。
パラメータ (@MyDate_Copy) をスプーフィングしてパラメータ スニッフィングを無効にすると、問題が解決します。これは、サーバーが任意の NULL 値に基づいて誤った実行プランを使用していることを示唆しています。
現象についての洞察
受け入れられた回答によると、SQL でのパラメーター スニッフィングServer 2005 には、不適切な実行計画につながる可能性のある問題があることが知られています。パラメーターが NULL の場合でも、サーバーは代表的ではないパラメーター値に基づいて効果のないプランを生成すると推測されます。さらに、LEFT JOIN と NULL に関する問題が確認されていますが、これらを NOT IN または NOT EXISTS に置き換えることで解決されました。
解決策
SQL Server 2008 の場合、不明な場合に最適化オプションを使用すると、問題を軽減できます。
以上がNULL パラメータを使用してもストアド プロシージャでパフォーマンスの問題が発生するのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。