0

10 個のフィールドを持つ 10,00,000 を超えるデータを含むテーブルで重複を見つけるために、以下のようなクエリがあります。クエリを実行しようとすると、読み込みと読み込みが 1 時間以上続きますが、実行を完了できません。ちょうど 100 レコードの同様のテーブルで同じクエリを試すと、うまくいきます。

(すべての列のデータ型は nchar です)

では、これを 10,00,000 を超えるデータにどのように使用できるのだろうか。

select * from table1 as L
where (select count(*) from table1
where L.date + L.time + L.color + L.supplier = table1.date +
table1.time + table1.color + table.supplier and table1.variety = 'dark' 
and date between '01062012' and '30062012') > 1
4

3 に答える 3

1

使用しないL.date + L.time + L.color + L.supplierでください=table1.date + table1.time + table1.color + table.supplier 使用すると、結合でインデックスを使用するすべての機能が破壊されます。

select * from table1 as L
where (select count(*)
         from table1
        where table1.date       = L.date
          and table1.color      = L.color
          and table1.supplier   = L.supplier
          and table1.variety    = 'dark'
          and table1.date between '01062012' and '30062012'
     )
     > 1

また、すべての結合フィールド(種類、色、サプライヤー、日付)をカバーするインデックスがテーブルにあることを確認してください。

を使用するなど、重複を見つけるための他のオプションがありますがROW_NUMBER()、テーブル構造 (一意の ID フィールドなど) と重複を構成するもの (およびしないもの) について詳しく知る必要があります。

于 2012-07-06T09:48:16.850 に答える
0

ただし、テーブル構造についてはわかりません。極端な負荷がかかると、テーブルがロックされているようです。以下のヒントを参考にしてみてください。

これとは別に、実行に必要な * および読み取りレコードを削除してみてください。

select * from table1 as L WITH(NOLOCK)
where (select count(1) from table1 WITH(NOLOCK)
where L.date + L.time + L.color + L.supplier = table1.date +
table1.time + table1.color + table.supplier and table1.variety = 'dark' 
and date between '01062012' and '30062012') > 1

それがあなたの問題を解決することを願っています。

乾杯

于 2012-07-06T09:43:14.670 に答える
0

私は初心者であり、私の提案は適切ではないかもしれませんが、あなたの場所にいたら、同じために SSIS を使用していたでしょう。ssis でスクリプト コンポーネントを使用し、操作を実行します。

于 2012-07-06T09:43:38.413 に答える