0

我正在进行一项性能练习,我想知道是否有机会改进这一点,只是通过查询此信息而不是尝试进行任何数据库架构或数据更改的方式。

下面的查询大约需要 200 毫秒来执行。我知道我雄心勃勃,但挑战在于是否有办法让自己失望。我准备使用 ADO.NET 或使用 SP 或使用 sql 查询,但不能进行任何数据更改。此外,EmpTable 有大约 2000 万行。它选择与 paramid 匹配的 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

您的查询看起来很简单,您将无法对其进行太多改进。

我要检查的第一个地方是看看您是否可以在表上添加一个针对此查询优化的索引以提高性能。

为您正在运行的查询获取查询执行计划并查找任何问题区域。这似乎是一个可以通过数据库调优得到最好解决的问题。

于 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 回答