有沒有在SQL Server中會告訴你,如果TOP生效關鍵字或元信息?Sql Server TOP - 用?
EX:
Select TOP 5 * From Stuff
RESULT: 5 rows
確定是否有6個或更多的最佳方法是什麼?
I could do:
SELECT TOP 6 count(*) FROM Stuff
但我關心的一個單獨的調用來檢索計數,因爲有實際的查詢比這要複雜得多,並在一張大桌子。
謝謝!
有沒有在SQL Server中會告訴你,如果TOP生效關鍵字或元信息?Sql Server TOP - 用?
EX:
Select TOP 5 * From Stuff
RESULT: 5 rows
確定是否有6個或更多的最佳方法是什麼?
I could do:
SELECT TOP 6 count(*) FROM Stuff
但我關心的一個單獨的調用來檢索計數,因爲有實際的查詢比這要複雜得多,並在一張大桌子。
謝謝!
嗯,你可以選擇最上面的N + 1(其中N在你的例子是5,那麼在你的榜樣選擇前6名),丟棄最後一個在你的客戶端代碼中,並且使用第六個元素的存在來確定如果首先使用N,TOP是否會產生效果。不過,我不確定這樣做有多大價值。
+1這是[space space pens]中的一支鉛筆(http://en.wikipedia.org/wiki/Space_Pen)。 – mafue
+1這可能是最有效的方法。 –
哇。這是一個漫長的一天。不知道那是怎麼一回事。 – LethalFlipper
你可以附加一個布爾值,到時以相同的邏輯子查詢的COUNT(*),當它返回一個值小於或等於5返回的值大於5,假返回true查詢。
這將增加你需要返回的數據信息。如果你關心性能,並且查詢非常複雜,那麼這可能不會對單獨的查詢產生很大的改進,但應該至少有一點改進。
有沒有辦法做到這一點沒有兩個查詢或做表演殺死recacluations ...
Select TOP 5 * From Stuff
和
Select Count(*) From Stuff
事實並非如此,COUNT()OVER()可以做到這一點 –
@AaronBertrand我想看到的查詢計劃,看看哪一種方式更effecient。 – bluevector
隨意。在迄今爲止所提出的所有解決方案中,當我一起執行所有解決方案時,卡爾和馬丁的每個解決方案佔總成本的4%。 RedFilter的股價上漲1%至5%,HLGEM的股價上漲42%,其他44%的股價上漲。我對sys.all_columns做了我的測試。 –
沒有什麼自動就可以使用。你可以使用的東西沿着這些線路
DECLARE @N INT = 5;
WITH T
AS (SELECT TOP (@N + 1) *
FROM master..spt_values
ORDER BY number)
SELECT TOP (@N) *,
CASE
WHEN Count(*) OVER() = (@N + 1) THEN 1
ELSE 0
END AS MoreRecords
FROM T
ORDER BY number
@AaronBertrand不,因爲他的'WITH'只選了6行。 – ean5533
@ ean5533正確,但OP的「WITH」可能不是。我可能會演示這個使用變量。 –
@AaronBertrand - OP應該有一個「TOP 6」(或者「TOP N + 1」),這樣它可以在第6行之後停止掃描。 –
SELECT TOP 5 Field1, field2, recordcount
FROM Stuff
CROSS JOIN (SELECT COUNT(*) as recordcount FROM Stuff) a
ORDER BY Field1
請注意,我刪除了使用SELECT *的SQL反模式,並且在獲取TOP N記錄時未使用ORDER BY。 – HLGEM
select top 5 *,
case when count(*) OVER() <= 5 then 'yes' else 'no' end as AllRecordsReturned
from supportContacts
「生效」以什麼方式?這意味着它實際上限制了你的結果集?只要算你回來的東西。 – bluevector
@jonnyGold計算他回來的東西不會告訴他是否有更多的行比他要求。 – ean5533
@ ean5533因此,我要求澄清「生效」的含義? – bluevector