需要优化嵌套的select语句

时间:2010-09-24 15:13:52

标签: sql mysql

我有以下SQL:

SELECT customfieldvalue.ISSUE
FROM   customfieldvalue
WHERE  customfieldvalue.STRINGVALUE 
IN (SELECT customfieldvalue.STRINGVALUE
    FROM   customfieldvalue
    WHERE  customfieldvalue.CUSTOMFIELD = "10670"
    GROUP  BY customfieldvalue.STRINGVALUE
    HAVING COUNT(*) > 1);

内部嵌套选择在MySQL 5.0.77上以1.5秒的形式返回3265行,当它自己运行时。 customfieldvalue表包含2286831行。

我想返回ISSUE列的所有值,其中STRINGISSUE列值不是该行的唯一值,而CUSTOMFIELD列包含“10670”。

当我尝试运行上面的查询时,MySQL似乎陷入困境。我已经把它运行了一分钟,但我很确定问题是我的问题。

1 个答案:

答案 0 :(得分:0)

尝试以下几点:

    SELECT cfv1.ISSUE
    COUNT(cfv2.STRINGVALUE) as indicator

    FROM   customfieldvalue cfv1

    INNER JOIN customfieldvalue cfv2
    ON cfv1.STRINGVALUE = cfv2.STRINGVALUE AND cfv2.CUSTOMFIELD = "10670"

    GROUP BY cfv1.ISSUE
    HAVING indicator > 1

这可能不适用于复制和粘贴,因为我还没有验证它,但在MySQL中JOIN 经常比子查询快得多,甚至数量级。