2

このように:

id = 3 の「テーブル」から削除します。

テーブル (id, 値) 値 (3, "aaa"), (3, "bbb"), (3, "ccc") に挿入します。

値の数は数百であり、多くの値は前回と比較して同じであり、追加または削除するレコードはわずかです。

このテーブルを使用して個人のプロパティを格納し、そのプロパティが繰り返されるため、1 人のテーブルに多くのレコードを挿入します。プロパティを更新すると、いくつかのレコードが追加または削除され、ほとんどのレコードは変更されませんが、新しいプロパティ セットを取得すると、どれを追加してどれを削除するかわかりません。古いレコードをすべて削除してから、新しいレコードを挿入する必要がありますが、私には遅すぎます。より速い方法はありますか?

4

3 に答える 3

1

テーブル全体のレコード数に比べて 1 人あたりのレコード数が少ない場合、おそらく最速の方法だと思います。速度を向上させる唯一の明らかな方法は、id 列に一意でないインデックスを作成することです。

少し非正規化する場合は、必要なことを行う別の方法は、プロパティをコンマ区切りの値に結合することです。したがって、複数の行を削除してから挿入する代わりに、1 つの行を更新するだけで済みます。

update table set id=3, values="aaa,bbb,ccc" where id=3;

valuesこれにより、手動で逆引きインデックスを維持しない限り、 で検索する機能が失わvaluesれ、コンマ (または使用する終了文字) を含めることはできません。この手法を使用するときに役立つもう 1 つのトリックは、値を終了文字で囲むことです。

update table set id=3, values=",aaa,bbb,ccc," where id=3;

valuesこのように、検索用語を終了文字で囲むことにより、全文検索を実行できます。select * from table where ",aaa," in values

さらに、一意の制約を指定する機能が失われるため、アプリケーション ロジックで値のエントリが重複しないようにする必要があります。

于 2013-01-09T04:15:53.610 に答える
0

主キーを使用して複数のテーブルを更新するつもりですか? 次に、これこれを見てください。

于 2013-01-09T02:53:41.217 に答える
0

正しい行で 1 人を設定したら、このように別の人にコピーできます。たとえば、ID 1 から 2 にコピーできます。

insert into table (id, value)
select 2, value
from table
where id = 1;
于 2013-01-09T03:48:06.870 に答える