product(10kレコード)、product_attribute(4kレコード)、product_value(2mレコード)の3つのテーブルがあります。productとproduct_attributeは、product_valueを介して接続されます。特定の製品(たとえば、product_id = 001)と、それぞれの属性名および属性値を取得したいと思います。最初はやってみます
SELECT product.product_id, product_attribute.attribute_name, product_value.attribute_value
FROM product, product_attribute, product_value
WHERE product.product_id = 001 AND product.product_id = product_value.product_id AND product_attribute.product_attribute_id IN (SELECT product_value.product_attribute_id FROM product_value WHERE product_value.product_id = 001)
しかし、それは非常に遅いです。それから私はINNER JOIN
代わりに使用しましたIN
SELECT product.product_id, product_attribute.attribute_name, product_value.attribute_value FROM product
INNER JOIN product_value ON product.product_id = 001 AND product.product_id = product_value.product_id
INNER JOIN product_attribute ON product_attribute.product_attribute_id = product_value.product_attribute_id WHERE product.product_id = 001
しかし、それでも非常に遅いです。クエリは36分で31行を返します。
この問題に対するより良い解決策はありますか?
クエリを説明すると、次のようになります。
*************************** 1. row ***********
id: 1
select_type: SIMPLE
table: product_attribute
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 5247
Extra:
*************************** 2. row ***********
id: 1
select_type: SIMPLE
table: product
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 91818
Extra: Using where; Using join buffer
*************************** 3. row ***********
id: 1
select_type: SIMPLE
table: product_value
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1731016
Extra: Using where; Using join buffer
これを試して:
SELECT p.product_id, pa.attribute_name, pv.attribute_value
FROM product p
INNER JOIN product_value pv ON p.product_id = pv.product_id
INNER JOIN product_attribute pa ON pa.product_attribute_id = pv.product_attribute_id
WHERE p.product_id = 001
このクエリを実行し、それでもクエリに直面している場合はEXPLAIN
、上記のクエリの計画を追加するよりも遅い
パフォーマンスを向上させるには、列にINDEXを作成する必要があります。
テーブルのproduct_id
列にインデックスを作成しproduct_value
ます
テーブルのproduct_attribute_id
列にインデックスを作成しproduct_value
ます
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加