我一直在使用cmd.Parameters.AddWithValue,而沒有指定DBType(int,varchar,...)來運行查詢。查看SQL Profiler後,似乎查詢運行此方法的運行速度要比指定數據類型慢很多。AddWithValue without DBType導致查詢運行緩慢
爲了讓你瞭解它有多慢,這裏有一個例子。查詢是對單個表的簡單查詢,並且where語句中的列被編入索引。指定數據類型時,某個查詢運行大約0 MS(對於要測量的sql server而言太小),並且需要41次讀取。當我刪除DBType時,可能需要大約200毫秒,並且10000次讀取才能完成查詢。
我不確定它是否只是SQL Profiler誤報值,或者如果這些值實際上是正確的,但它是可重複的,因爲我可以添加和刪除DBType,並且它會生成SQL Profiler中給出的值。
有沒有人遇到過這個問題,以及一個簡單的方法來解決它。我意識到我可以在我的代碼中添加數據類型,但這似乎有很多東西需要添加,如果有更簡單的方法來解決它,那將是非常感謝。
[編輯]
一些初始測試(在運行在一個循環中這兩種情況下)之後,好像值分析器即給出是準確的。
就像添加的信息一樣,我在Windows XP Pro上運行.Net 2.0,在Windows 2000上運行SQL Server 2000上的SQL Server 2000。
[更新]
經過一番周圍挖,我能找到這個blog post,這可能是相關的。似乎.Net中的字符串值(因爲它們是unicode)會自動創建爲nvarchar參數。我必須等到週一纔開始工作,看看能否解決問題。儘管如此,我仍然需要設置數據類型,這正是我試圖避免的。
這個問題並沒有顯示出我所做的每一個查詢,只是一些選擇,所以我仍然可能會訴諸在有問題的查詢中設置DBType,但我正在尋找一個更廣義的解決方案問題。
有問題的參數實際上是一個varchar場,所以我不認爲這會是問題。 – Kibbee 2008-12-06 01:42:18