首页
学习
活动
专区
圈层
工具
发布

SQL优化
EN

Stack Overflow用户
提问于 2010-10-28 20:06:32
回答 7查看 238关注 0票数 2

如何对此进行优化?

代码语言:javascript
复制
SELECT e.attr_id, e.sku, a.value

FROM product_attr AS e, product_attr_text AS a

WHERE e.attr_id = a.attr_id
AND value
IN (
    SELECT value
    FROM product_attr_text 
    WHERE attribute_id = (
        SELECT attribute_id
        FROM eav_attr 
        WHERE attribute_code = 'similar_prod_id' 
    ) 
    AND value != ''

    GROUP BY value
    HAVING (COUNT( value ) > 1 )
)
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-10-28 20:16:51

将其更改为联接。MySQL没有在IN()子句中优化子查询-它是按行重新计算的(对于许多行来说效率非常低)。

代码语言:javascript
复制
SELECT e.attr_id, e.sku, a.value
FROM product_attr AS e
INNER JOIN product_attr_text AS a ON e.attr_id = a.attr_id
INNER JOIN (SELECT value
    FROM product_attr_text 
    INNER JOIN eav_attr ON eav_attr.attribute_id=product_attr_text.attribute_id
    WHERE attribute_code = 'similar_prod_id'  
    AND value != ''
    GROUP BY value
    HAVING COUNT( value ) > 1 
) AS filter ON filter.value=a.value

在转换完查询之后(您可能需要根据您的模式进行一些更正),对查询和索引运行EXPLAIN

票数 1
EN

Stack Overflow用户

发布于 2010-10-28 20:17:48

代码语言:javascript
复制
SELECT  e.attr_id, e.sku, a.value
FROM    (
        SELECT  pat.value
        FROM    eav_attr ea
        JOIN    product_attr_text pat
        ON      pat.attribute_id = ea.attribute_id
        WHERE   ea.attribute_code = 'similar_prod_id'
                AND value <> ''
        GROUP BY
                value
        HAVING  COUNT(*) > 1
        ) q
JOIN    product_attr_text AS a
ON      a.value = q.value
JOIN    product_attr AS e
ON      e.attr_id  = a.attr_id

创建索引:

代码语言:javascript
复制
 eav_attr (attribute_code)
 product_attr_text (attribute_id, value)
 product_attr_text (value)
 product_attr (attr_id)
票数 2
EN

Stack Overflow用户

发布于 2010-10-28 20:10:21

很难回答...

我唯一能说的就是:

  • 查看执行计划
  • use IO statistics-

看看声明中的哪一部分有问题,为什么。看看您是否可以通过添加索引等来提高性能。

除此之外,我不明白您为什么要使用group by子句...

还有,为什么使用子查询,而不是连接表?(尽管我认为这不会有太大的不同,因为SQL Server优化器应该足够智能,可以生成相同的执行计划)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4042721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档