3

私は非常に大きなテーブルに対してこのクエリを実行しています(おそらく150〜200 000行程度):

select count(Distinct(eti.Email)) FROM table1 eti 
LEFT OUTER JOIN table2 ti on ti.Email = eti.Email and ti.SiteId = eti.Site_Id 
WHERE eti.Site_Id=1

SMMS (SQL Server Management Studio) では実行に 1 秒もかかりませんが、ASP.NET サイトから実行しようとするとタイムアウトになります。

私は PetaPoco を使用して、「フードの下で」このコードを実行するデータを取得しています。

using (var cmd = CreateCommand(_sharedConnection, sql, args))
{
    object val = cmd.ExecuteScalar();
    OnExecutedCommand(cmd);
    return (T)Convert.ChangeType(val, typeof(T));
}

SSMSがクエリを実行するときにいくつかの「特別な設定」があることについて読んだことがありますか? 私は本当にこれを稼働させる必要があります。

接続の「MARS」設定がこれに影響を与える可能性はありますか? 問題をデバッグして見つけるにはどうすればよいですか?

ありがとう!

4

1 に答える 1

0

お手伝いありがとう!

私は最終的に問題を発見しました (少し恥ずかしいです)... sp_executesql が遅いという msdn フォーラムからこのブログの質問を見つけました: SQL Server MVP である Dan Guzman の回答: http://social.msdn.microsoft.com /フォーラム/en-US/transactsql/thread/3cb08860-49a0-432a-8605-0af6b374dded/

もう 1 つの考えられる問題は、パラメーターと列のデータ型の間のデータ型の不一致であり、その結果、sargable でない式と不適切な計画が発生します。さらにヘルプが必要な場合は、クエリとテーブル DDL を投稿してください。

だから私は二重にチェックし、table2にEmailとSiteIdフィールドの両方が「Nullable」に設定されていることがわかり、table1に一致するように変更して問題を修正しました。

于 2013-04-10T08:41:02.943 に答える