注意:EAV(エンティティ、属性、値)テーブルデザインを使用するデザインには注意してください。参照整合性とクエリの複雑さのために、処理が非常に困難になる傾向があります。
以下を使用して最適化します。
- 副選択の代わりに参加します。
- 表記に参加します。
- すべての列名の明示的なテーブルエイリアス。
フェーズ1:
SELECT e.attr_id, e.sku, a.value
FROM product_attr AS e JOIN product_attr_text AS a
ON e.attr_id = a.attr_id
WHERE a.value IN (
SELECT p.value
FROM product_attr_text AS p
JOIN eav_attr AS v ON p.attribute_id = v.attribute_id
WHERE v.attribute_code = 'similar_prod_id'
AND p.value != ''
GROUP BY value
HAVING (COUNT( value ) > 1)
)
フェーズ2:
SELECT e.attr_id, e.sku, a.value
FROM product_attr AS e
JOIN product_attr_text AS a ON e.attr_id = a.attr_id
JOIN (SELECT p.value
FROM product_attr_text AS p
JOIN eav_attr AS v ON p.attribute_id = v.attribute_id
WHERE v.attribute_code = 'similar_prod_id'
AND p.value != ''
GROUP BY value
HAVING (COUNT( value ) > 1)
) AS x ON x.value = a.value