小编use*_*073的帖子

即使使用INNER JOIN而不是IN,MySQL查询也非常慢

我有三个表:产品(10k记录),product_attribute(4k记录)和product_value(2m记录).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)
Run Code Online (Sandbox Code Playgroud)

但它非常缓慢.然后我用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
Run Code Online (Sandbox Code Playgroud)

但它仍然很慢:查询在36分钟内返回31行!

有没有更好的解决方案来解决这个问题?

解释查询给出:

*************************** 1. row ***********
           id: 1
  select_type: SIMPLE
        table: product_attribute
         type: ALL
possible_keys: NULL …
Run Code Online (Sandbox Code Playgroud)

mysql sql performance select query-optimization

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

mysql ×1

performance ×1

query-optimization ×1

select ×1

sql ×1