コードで実行すると、SSMS よりもクエリが大幅に遅くなるのはなぜですか?
同じクエリと実行環境があるにもかかわらず、クエリはコードで実行すると、SQL Server Management Studio (SSMS) と比較して顕著な時間差が生じます。この質問では、この不一致の根本的な原因を詳しく調べます。
問題の調査
提供されたコードの比較により、次のコード間の @clientID パラメータのデータ型の不一致が明らかになります。 C# コードと SSMS スクリプト。 C# では、AddWithValue メソッドはパラメーターを NVARCHAR として追加しますが、SSMS では、パラメーターは VARCHAR として宣言されます。
データ型の優先順位と SARG 機能
データ型の優先順位規則により、Where client_id = @clientID 式は次の場合に SARG 可能 (検索引数) 不可になります。 client_id 列が VARCHAR 型であると仮定すると、@clientID は NVARCHAR 型になります。これにより、クエリ オプティマイザーはコストのかかるテーブル スキャンを実行する必要があります。
解決策
この不一致を解決するには、次のいずれかを行ってください。
SqlParameter clientIDParam = new SqlParameter("@clientID", SqlDbType.Varchar, 200); clientIDParam.Value = ClientID; ada.SelectCommand.Parameters.Add(clientIDParam);
Where client_id = cast(@clientID as varchar(200))
データ型を明示的に指定すると、潜在的なキャッシュ汚染の問題を防ぐことができます。
さらに考慮事項
これらのデータ型の微妙な点を理解し、推奨される解決策を実装することで、コードと SSMS の間のクエリ パフォーマンスの不一致を解決できます。
以上がコードでの SQL クエリが SSMS よりもはるかに遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。