Sql 需要优化嵌套的select语句

Sql 需要优化嵌套的select语句,sql,mysql,Sql,Mysql,我有以下SQL: SELECT customfieldvalue.ISSUE FROM customfieldvalue WHERE customfieldvalue.STRINGVALUE IN (SELECT customfieldvalue.STRINGVALUE FROM customfieldvalue WHERE customfieldvalue.CUSTOMFIELD = "10670" GROUP BY customfieldvalue.S

我有以下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);
内部嵌套的select在MySQL 5.0.77上运行时,以1.5秒的时间返回3265行。 customfieldvalue表包含2286831行

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


当我尝试运行上面的查询时,MySQL似乎被卡住了。我让它运行了一分钟,但我很确定问题出在我的查询上。

尝试以下内容:

    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中,连接通常比子查询快得多,甚至数量级。

而不是使用count(*)使用count(1)我同意这里的连接应该更快。基于连接删除重复项的后处理将影响您感知到的速度提升。取决于所涉及的行数,但数据集越大,该方法就越有可能无法扩展。使用适合这项工作的工具,通过检查解释计划和比较——而不是基于“连接总是更快”和“子查询不好”之类的神话。@OMG:我添加了“经常”这个词,让你感觉更好。不管怎么说,如果你没有什么可比的,那该怎么比呢。。