2

私はeavテーブル構造を持っています、special_from、special_to、special_displayは入力する必要はありません

製品のこれらのeav属性を設定するSQLスクリプトを作成しています。スクリプトの仕組みは、eavを更新する必要があるときに必要なすべてのデータがある場合に、これら3つの値のデータが処理されて一時テーブルに格納されることです。属性

製品がこれらの値を持つ可能性があるので、私は2つのapposesを持っています

1)DELETE一時テーブルにリストした製品のeav値、次にINSERTそれら2)INSERT割り当てられていない値、次に割り当てられているUPDATE

最大10,000の製品を扱っているので、クエリにかかる時間を最小限に抑えたいので、どちらがより効率的か疑問に思います。

4

1 に答える 1

1
INSERT INTO
  catalog_product_entity_datetime
  (entity_type_id, store_id, entity_id, attribute_id, value)
VALUES
  (4, 0, PRODUCT_ID_1, ATTRIBUTE_ID_FOR_SPECIAL_TO, SOME_DATE_VALUE),
  (4, 0, PRODUCT_ID_1, ATTRIBUTE_ID_FOR_SPECIAL_FROM, SOME_DATE_VALUE),
  (4, 0, PRODUCT_ID_2, ATTRIBUTE_ID_FOR_SPECIAL_TO, SOME_DATE_VALUE),
  (4, 0, PRODUCT_ID_2, ATTRIBUTE_ID_FOR_SPECIAL_FROM, SOME_DATE_VALUE),
  -- ... and so on
  -- ... and so on
  -- ... and so on
ON DUPLICATE KEY UPDATE value = VALUES(value)

また、特別な表示フィールド(データ型がどれであっても)についても同様です。

ここではマゼントを想定しました。EAVを使用して見たのはマゼントだけだからです。

この2つのクエリを使用すると、影響を受けるすべての製品を一度に更新できるため、データベースへの影響を最小限に抑えることができます(インデックスの再作成)。もう1つの方法は、エントリごとのインデックスの再作成を回避するために、トランザクション内のループ内で単一のクエリを実行することです。

于 2013-03-26T23:09:46.023 に答える