2

我有一个eav表结构,special_from、special_to和special_display不需要填写

我正在制作一个 sql 脚本来填充产品的这些 eav 属性,我的脚本的工作原理是处理这 3 个值的数据并将其存储在临时表中,当我拥有所有需要更新 eav 的数据时属性

产品可能具有这些值,所以我有 2 个应用

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)

特殊显示字段也类似(无论是哪种数据类型。

我在这里假设 magento,因为它是我见过的唯一使用 EAV 的东西。

通过这 2 个查询,您将能够一次更新所有受影响的产品,从而最大限度地减少对数据库的影响(重新索引)。另一种方法是在事务的循环中执行单个查询,以避免每个条目重新索引。

于 2013-03-26T23:09:46.023 回答