我跑在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