2012-11-02 70 views

回答

1

你做了一個計數後,你會用IF語句做到這一點嗎?

或者可能是一個子查詢?

SELECT COUNT(*)從用戶 USERCOUNT位 其中userid中(選擇用戶頂部5000的用戶ID)

,會給你的5000或更小的潛在USERCOUNT位。

+0

我不能用查詢後的IF做到這一點。我想這樣做來提高性能,所以服務器不需要加載數百萬行。 **其中userid(從用戶中選擇頂級5000用戶標識)**將無法正常工作。在我的情況下ID有很多缺失的值。 – user1050035

1

我自己找到了解決方案。

With OrderedRows AS(
    SELECT ROW_NUMBER() OVER (ORDER BY SomeColumn) AS RowNumber 
    FROM MyTable 
) 
SELECT count(*) FROM OrderedRows WHERE RowNumber <= @MaxRowCount; 
2
SELECT Count(*) 
FROM (
    SELECT TOP(@MaxRowCount) * 
    FROM MyTable 
) as q 

我覺得你WITH解決方案可能不是高性能的,因爲它必須遍歷每一行分配ROW_NUMBER()。我相信這裏的解決方案會表現得更好。

+0

非常感謝。我用一行代碼檢查了你的查詢,當我使@MaxRowCount = 1,000,000時,查詢的工作速度提高了30%。它也自動選擇最佳索引,而在我的情況下,它將取決於ORDER BY列。 – user1050035