我跑在ADO.NET C#和SQL Server Management Studio中相同的命令。通过C#运行的SQL性能明显更差 - 内存使用情况更糟(耗尽所有可用内存),从而导致数据库执行时间增加。管理工作室并不完美(它也会导致sql server耗尽内存),但并不像通过ADO.NET那样糟糕。ADO .NET与SQL Server Management Studio中 - ADO执行得很差
我运行:Windows 7中时,SQL Server 2008 R2,10.50.1600。 C#.NET 3.5。 Sql Server管理Studio 2008 R2。所有的程序和数据库都在我的本地开发机器上。
我上运行的SQL是40创建视图的40创建2数据库的唯一索引。我需要在运行时执行此操作,因为我们正在两个数据库之间运行数据库比较(由于不相关的原因,我们需要比较视图而不是表格)。由于业绩是一个问题,我们不能一直留下观点和指数。
的SQL是这样的:
create view [dbo].[view_datacompare_2011106] with schemabinding as (
SELECT t.[ID], t.[Column1], t.[Column2], t.[Column3], FROM dbo.Table t WHERE t.[ID] in ('1','2','3','4'))
go
create unique clustered index [index_datacompare_2011106] on [dbo].[view_datacompare_2011106] (ID)
go
...
唯一的区别是,C#代码不叫去。每个create cmd都包含在一个using语句中,并通过ExecuteNonQuery()调用,例如
using (SqlCommand cmd = new SqlCommand(sql, this.connectionActualDb))
{
cmd.CommandTimeout = Int32.Parse(SqlResources.TimeoutSeconds);
cmd.ExecuteNonQuery();
}
P.S.当您在计算列或索引视图上创建或更改索引时,SET ARITHABORT必须为ON。
可能重复:http://stackoverflow.com/questions/9974/query-times-out-from-web-app-but-runs-fine-from-management-studio或http://stackoverflow.com/问题/ 2465887/why-will-set-arithabort-on-dramatic-speed-up-a-query或http://stackoverflow.com/questions/2736638/sql-query-slow-in-net-application-but- instantaneous-in-sql-server-management-stu –
您是否比较过执行计划? – Justin
值得指出的是它不是一个ADO问题。如果您追踪.net的查询,您会看到它在调用sp_executesql的过程中执行。如果你使用这个查询并在SSMS中运行它,它就像从ADO运行一样慢。在视图上创建聚簇索引的 – Daz