私は125kレコードのテーブルを持っています。毎日、〜20レコードを挿入し、挿入時間順のテーブルの上位1,000レコードに基づいて1,000の通知を生成します。通知が生成されると、通知はマークされ、今後の通知配信のために考慮されなくなります。これは、奇妙な方法で注文された100kの大きなインサートがいくつかの問題を引き起こすことを除いて、長い間うまく働いています。SQL Server 2012の比例ソート
4種類のレコードがあり、2つの異なる値を持つ2つの列があり、これらの4つの型のどちらを決定します。ファイルソートに基づいて、タイプの1つが最初の80kレコードにあり、毎日の通知を支配します。
私はこれを修正するために、挿入時にトリガーを作成して、毎日より均等に通知が分散されるようにテーブルを並べ替えます。
私の質問:列内のデータに基づいて比例的にソートできるSQLソート機能はありますか?
つまり、A列に基づいて80/20の分割を得ることはできますか、B列に基づいて80/20分割を得ることができるので、以下のオプションがある場合、640レコードに(1,1)、 640(1,1)のレコードを持っていない時があるので、ハードコーディングされたselect top X
ステートメントを使わずに(1,2)の160レコード、(2,1)の160レコード、(2,2)レコードが、私は1000の合計通知が生成されます。
Column A Column B
1 1
1 2
2 1
2 2
テーブルには「オーダー」がありません。あなたがテーブルの中でいくつかの偶発的な注文に頼っているなら、あなたは重大な間違いをしている。結果セットにオーダーしたい場合は、 'ORDER BY'節を使い、そのオーダーを指定する必要があります。 –
私は、 'top'と' union'を使って動的ステートメントを構築することをお勧めします。この方法で、あなたは常に1000の結果を得るでしょう。 –
また、テーブル構造も含めてください。タイプの1つが短い行である場合のルールは何ですか?あなたは特定の他のタイプからそれらをつかみますか?置換行に使用する型の順序は何ですか? –