在過去,我們有一個存儲功能,基本上是這樣的:的SQL Server 2008 R2 - EXISTS VS TOP 1
IF EXISTS (SELECT * FROM ...) RETURN 1
凡SELECT將需要相當長的時間來執行,但是,與EXISTS纏繞我們很快完成。
但是,我們現在需要在應用程序中的「證書」,「給我一個例子,你爲什麼返回1」。我們將查詢改爲:
DECLARE @cert BIGINT
SELECT TOP 1 @cert = id FROM ...
RETURN @cert
但是,現在需要更長的時間。我們的查詢中沒有ORDER BY
子句。
SQL Server仍然檢索所有行,然後只選擇第一個? 我們監督了一些事情嗎?我們不應該有相同的速度? 爲什麼第二個查詢需要比第一個查詢多得多的時間? (時間的大小)
您是否嘗試過使用數據執行計劃? – 2013-03-12 12:22:03
這裏有什麼問題...... – Mingebag 2013-03-12 12:22:48
我們並不是真的只能執行這個函數(是的,不是最優的......),並且如果我們查看基本過程的查詢計劃,這個過程位於堆棧跟蹤調用的某處我們的功能,我們只得到基本程序的計劃... – 2013-03-12 12:24:23