0

私は10のテーブルを持っており、それぞれ0.5 + Mのレコード(合計900万のレコード)があります。構造は各テーブルで非常に似ています。次に、各テーブル内およびテーブル間で重複を削除するか、すべてのテーブルに誰が存在し、実際にいくつの一意のレコードがあるかを確認したいとします。しかし、問題は膨大な量のデータです。

そこで、メールアドレス用に1つ、携帯電話番号用に1つ、住所用に1つなど、さまざまなテーブルを作成することを計画しました。しかし、各テーブルに5Mのレコードがある場合、私のテーブルは非常に遅くなります。

1つの解決策は、生年月日ごとにテーブルを作成し、12個のテーブルを作成してから、各テーブル内のデータを並べ替えることができるようにすることです。

私は何をすべきか提案してください?データは960万レコード/3.2GBです

また、1つのテーブルから別のテーブルにデータをすばやく移動する方法を提案します。

4

3 に答える 3

1

dbの設計に問題があるようです。3.2GBのデータセットでも十分に高速に実行できます...データベース構造を最適化し、適切なインデックス作成、キャッシュなどを使用する方が、さらに多くのテーブルに分割するよりもはるかに優れています。実行するクエリをできるだけ少なくし、クエリをできるだけ単純にする必要があります。

あなたがそれらをさらに分解するならば、あなたは長期的にあなた自身を足で撃つでしょう。

于 2012-04-08T08:57:07.947 に答える
1

12個のテーブルの結果を組み合わせた特定のビューを作成し、そのビューでクエリを実行して、目的のフィルター処理された結果を取得できます...

于 2012-04-08T09:01:04.160 に答える
1

構造は同じですが、行の一意性を決定する列のセットに一意性の制約がある新しいテーブルを作成します。

次に、INSERT IGNORE INTO....SELECT FROMを使用して、すべての行を古いテーブルから新しいテーブルに転送します。構文はここにあります。

次に、古いテーブルを切り捨て、INSERT INTO....SELECT FROMを使用して行を元のテーブルに戻します。

そもそも重複が作成されないように、元のテーブルに一意の制約を追加することをお勧めします。

于 2012-04-08T09:37:26.893 に答える