0

私が持っているテーブルは約1億以上の巨大なエントリで、デフォルトでは「A」で並べられています。同じ列 A を持つ多くのアイテムが存在する可能性があります。A は 0 から増加します。大きな数です。TABLESAMPLE を試しましたが、各 A 番号から適切な番号が選択されず、一部がスキップされるか、うまく使用されていない可能性があります。したがって、各 A 番号から同じ量の値を選択したいと思います。そして、選択した行の合計を数値にしたいと思います.1,000万としましょう。それをBと呼びましょう.

4

3 に答える 3

2

何を達成する必要があるかは正確にはわかりませんが、親および/または共通の属性値の間で非常によく分散された大きなサンプルサブセットが必要な場合、次のようにしました:

SELECT  *
FROM    YourTable
WHERE   (YourID % 10) = 3

これには、「3」を別の数字に変更するだけで、別のまったく異なるサンプルを取得できるという利点もあります。さらに、「10」を調整してサブサンプルのサイズを変更できます。

于 2012-04-29T23:24:06.113 に答える
1

以下を利用できますNEWID()

SELECT TOP 100
  *
FROM
  YourTable
ORDER BY NEWID()
于 2012-04-30T00:57:13.183 に答える
0

@RBarryYoungソリューションは正しく、一般的であり、idシーケンス(または任意の自動インクリメント列)などの任意の定数統計分布に対して機能します。ただし、分散が一定でない場合や、パフォーマンスの問題が発生する場合があります(SQL Serverは、WHERE句を計算するためにすべてのインデックスエントリをスキャンする必要があります)。

TOPこれらのいずれかが問題に影響を与える場合は、ニーズに合った組み込みのT-SQL演算子を検討してください。

SELECT TOP (30) PERCENT *
FROM YourTable;
于 2012-04-30T10:29:13.920 に答える