我們有一個表叫做Purchases
:ASP.NET/SQL服務器 - 超時已過期,而搜索
| PRSNumber | ... | ... | ProjectCode |
| PRJCD-00001 | | | PRJCD |
| PRJCD-00002 | | | PRJCD |
| PRJCD-00003 | | | PRJCD |
| PRJX2-00003 | | | PRJX2 |
| PRJX2-00003 | | | PRJX2 |
注:ProjectCode
是PRSNumber
前綴。
之前,當有表中沒有ProjectCode
領域,我們以前的開發人員使用此查詢來搜索特定供應商的採購:
select * from Purchases where left(PRSNumber,5) = @ProjectCode
是的,他們串聯了PRSNumber
,以獲得和比較ProjectCode
。儘管上面的代碼工作正常,不管表的設計如何。
但是,當我添加了一個新的領域,ProjectCode
,並使用此查詢:
select * from Purchases where ProjectCode = @ProjectCode
我收到此異常:
超時過期。在完成操作或服務器完成 之前已經超時的時間沒有響應。
我不敢相信,比較之前需要連接的第一個查詢比第二個查詢更快,而第二個查詢只能進行比較。你能告訴我爲什麼會發生這種情況?
有些信息可能會有所幫助:
PRSNumber
是varchar(11)
,是主鍵ProjectCode
是nvarchar(10)
- 兩種查詢工作正常在SQL Server Management Studio中
- 首先查詢在ASP.NET網站工作,但第二個不是
ProjectCode
被索引- 表已32K行
更新
ProjectCode
現在索引,還沒有我會做的運氣
可能的重複[如何增加我的存儲過程調用的超時時間(請參閱錯誤)?](http://stackoverflow.com/questions/841509/how-do-i-increase-the-timeout-期間爲我的存儲過程呼叫看到錯誤) – adatapost
你真的**需要所有列?如果不是,請選擇您真正需要的那些列! –
他不問如何消除錯誤,他問爲什麼要做類似的操作需要更長的時間以及如何解決性能問題。 –