0

私はパフォーマンスの演習に参加しており、DBスキーマやデータの変更を試みるのではなく、この情報を照会する方法で、これを改善する機会があるかどうか疑問に思っています。

以下のクエリの実行には約200ミリ秒かかります。私は野心的であることを知っていますが、課題は倒す方法があることです。ADO.NETを使用するか、SPを使用するか、SQLクエリを使用する準備ができていますが、データを変更できません。また、EmpTableには約2,000万行があります。パラミッドに一致するレコードを1つ選択します。

これがさらに最適化することはまだ可能だと思う人はいますか?

Log.Time()
            using (MyDataContext db = MyDataContext.GetContext())
            {
                db.ObjectTrackingEnabled = false;
                var _Query = from t in db.EmpTable
                             where t.id == paramId
                             select t;

                 if (!_Query.Any())
                    return null;
            }
            Log.Time()  -- 200 ms approx
4

2 に答える 2

1

Your query looks very simple and you won't be able to improve on it much.

The first place I would check would be to see if you could add an index on the table that was optimized for this query to improve performance.

Get a query execution plan for the query you are running and look for any problem areas. This really seems like a problem that could be best solved with database tuning.

于 2012-10-10T19:25:03.910 に答える
0

linqを使用すると、多少のオーバーヘッドが発生します(ただし、とにかくマイクロ最適化しています)。代わりに生のSQLを試して実行し、パフォーマンスに変化がないかどうかを確認できます。

using (MyDataContext db = MyDataContext.GetContext())
{
   var exists = db.ExecuteQuery<bool>(@"
       SELECT CASE WHEN EXISTS(SELECT NULL FROM EmpTable where t.id == {0}) 
       THEN CAST(1 As bit) 
       ELSE CAST(0 As bit) END", paramId);
   if(exists)
      return null;
}

またGetContext()、コンテキストを作成する以上のことをしていますか?

于 2012-10-10T19:33:47.823 に答える