是否有任何方法來限制count(*)的最大值,因此它在發現N行後停止計數行?SQL Server 2012:限制count(*)查詢的最大行數
我都嘗試SET ROWCOUNTñ和TOP N,但是當我使用FROM MyTable的SELECT COUNT(*),它們將被忽略。
是否有任何方法來限制count(*)的最大值,因此它在發現N行後停止計數行?SQL Server 2012:限制count(*)查詢的最大行數
我都嘗試SET ROWCOUNTñ和TOP N,但是當我使用FROM MyTable的SELECT COUNT(*),它們將被忽略。
你做了一個計數後,你會用IF語句做到這一點嗎?
或者可能是一個子查詢?
SELECT COUNT(*)從用戶 USERCOUNT位 其中userid中(選擇用戶頂部5000的用戶ID)
,會給你的5000或更小的潛在USERCOUNT位。
我自己找到了解決方案。
With OrderedRows AS(
SELECT ROW_NUMBER() OVER (ORDER BY SomeColumn) AS RowNumber
FROM MyTable
)
SELECT count(*) FROM OrderedRows WHERE RowNumber <= @MaxRowCount;
SELECT Count(*)
FROM (
SELECT TOP(@MaxRowCount) *
FROM MyTable
) as q
我覺得你WITH
解決方案可能不是高性能的,因爲它必須遍歷每一行分配ROW_NUMBER()
。我相信這裏的解決方案會表現得更好。
非常感謝。我用一行代碼檢查了你的查詢,當我使@MaxRowCount = 1,000,000時,查詢的工作速度提高了30%。它也自動選擇最佳索引,而在我的情況下,它將取決於ORDER BY列。 – user1050035
我不能用查詢後的IF做到這一點。我想這樣做來提高性能,所以服務器不需要加載數百萬行。 **其中userid(從用戶中選擇頂級5000用戶標識)**將無法正常工作。在我的情況下ID有很多缺失的值。 – user1050035