小编ang*_*ila的帖子

使用参数执行查询时,SqlCommand会变慢

执行参数时,DbDataAdapter.Fill()极其缓慢!

我有一个内部有2个参数的查询,当我在查询中硬编码这些参数时,需要1秒才能执行(在470k表行中,只返回20行).

我在这里发现了许多类似的帖子,我尝试了所有这些解决方案(设置arithabort,选项重新编译,选项优化,......)没有运气.

我只是执行查询(sql server 2008)而不是存储过程,因此使用arithabort的查询是这样的:

    string strSql = @"set ARITHABORT ON;
                             select  TOP 20 ....
Run Code Online (Sandbox Code Playgroud)

此外,我尝试在同一个事务中调用set arithabort,但首先执行该查询.

我不知道我做错了什么,但感觉是当我在ado.net上定义了参数时,ado.net正在执行一个非常糟糕的执行计划.

由于这个糟糕的选择,SSMS中的执行时间是1秒(缓存后),但在asp中是9秒!

查询是这样的:

strSQL @ ="select*
from Table1 where Name like @name";

然后:

        DbProviderFactory factory = DbProviderFactories.GetFactory(mProvider);
        DbCommand dbcmd = factory.CreateCommand();
        if (CommandTimeout != null)
            dbcmd.CommandTimeout = CommandTimeout.Value;
        if(this.transaccion != null)
            dbcmd.Transaction = this.transaccion;
        dbcmd.Connection = dbc;
        dbcmd.CommandText = strSQL;
        if (parametros != null)
            dbcmd.Parameters.AddRange(parametros);
        DbDataAdapter dbda = factory.CreateDataAdapter();
        dbda.SelectCommand = dbcmd;
        DataTable dt = new DataTable();
        dbda.Fill(dt);
        return dt;
Run Code Online (Sandbox Code Playgroud)

编辑14/01/2013(18:44)

我不再从DbProviderFactory检索连接,我直接使用SqlConnection和SqlCommand.我知道DbCommand和DbProvider是一个基础...但我觉得还有更多东西......因为性能急剧增加300%! …

sql-server asp.net performance ado.net oledbdataadapter

1
推荐指数
1
解决办法
2030
查看次数