4

誰かが、あるテーブルから別のテーブルに複数の行を移動し、設定された基準に基づいて元のテーブルから行を削除する方法を説明(または正しい方向に向ける)できますか?

理解します

INSERT INTO table2 SELECT * FROM table1

あるテーブルから別のテーブルにデータをコピーしますが、元のテーブルを削除する必要があります。テーブルのクエリを高速化することが提案されている理由は、すべての冗長データ(終了、期限切れ、3か月以上経過した製品)をメインテーブルから別のテーブルに移動する必要があるためです。

少し背景があります。製品を保持するテーブルがあります。一部の製品は期限切れですが、製品には引き続きアクセスできる必要があります。期限切れの製品は約50,000個、アクティブな製品は2,000個あります。フロントエンドに何を表示するかを決定するためのステータス列(int 1 =アクティブ、2 =期限切れなど)があります。

この投稿は2つの質問だと思います:

  1. 期限切れのアイテムを削除せずに製品テーブルのクエリを高速化するためのより良い方法はありますか?
  2. そうでない場合は、あるテーブルから別のテーブルに行を移動する方法

大変感謝します!

4

2 に答える 2

6

INSERT INTO table2(column_name1、column_name2)SELECT column_name1、column_name2 FROM table 1 WHERE(where句はここにあります)

DELETE FROM table1 WHERE(ここではwhere句)

上記のソース:mysqlはテーブル間で行を移動します

于 2013-02-12T21:52:26.423 に答える
4

テーブル内の50,000レコードは、実際にはそれほど多くありません。パフォーマンスの問題が発生した場合は、パフォーマンスを高速化するためにクエリとインデックスを調べます。また、これらの期限切れのレコードには引き続きアクセスする必要があるため、複数のテーブルを維持することはより困難になる可能性があります。

ただし、要求どおりに1つのテーブルから別のテーブルにデータを移動するには、2つの異なるステートメントを実行する必要があります。非アクティブな製品を移動したい場合:

INSERT INTO ProductsBackup SELECT * FROM Products WHERE Status <> 1
DELETE FROM Products WHERE WHERE Status <> 1

列にIDがある場合は、列名を指定した方がよい場合があります。ただし、ProductIdがIdentityであると仮定すると、他のテーブルを指している可能性があるため、元のIDを失いたくない場合があるため、それらを別のテーブルに移動する場合は注意が必要です。

幸運を。

于 2013-02-12T21:55:03.177 に答える