2016-12-14 3 views
1

SQLサーバー2008の200GBデータベースを照会しています。このデータベースを長期間にわたって毎日処理する必要があります。200GBのSQLサーバーデータベースで最大10を選択

私の仕事の一部は、非常に基本的な統計を行っています。いくつかの基準で最大の10を見つけます。たとえば、

select ID, sum(value) val 
from table 
group by ID 
order by val desc 

limitはSQL Serverでは使用できません。だから私の(愚かな)アプローチはすべての結果を得るために手をSQLサーバー管理スタジオからトップ10を選択することです。

これは本当に本当に遅いです。

誰でもこれを行うためのより速い方法を提供できますか?

+1

がTSQLでTOPキーワードを見てhttps://msdn.microsoft.com/en-us/library/ms189463.aspx – ojf

+0

をただでTOPを使用しますあなたの質問。スピードはあなたのインデックスに依存するつもりです。 – scsimon

+0

'from **データベース**'? –

答えて

0
with Sel1 as 
(
select ID, sum(value) val 
from database 
group by ID 
order by val desc 
) 
select top 10 * 
from Sel1 
+2

CTEは利点を提供しますか? – ojf

+0

IIRC、SQLS 2008は、TOP – JohnHC

+3

の後に注文を適用します。いいえ、CTEフォームに利点はなく、場合によっては若干のパフォーマンスが低下する可能性があります。 ORDER BYはTOPの前に常に適用され、ORDER BY基準に基づいてTOP N行を取得します。 –

4

あなたが試してみました:

select top 10 ID, sum(value) val 
from database 
group by ID 
order by sum(value) desc 
関連する問題