Sql 需要优化嵌套的select语句
我有以下SQL: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
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:我添加了“经常”这个词,让你感觉更好。不管怎么说,如果你没有什么可比的,那该怎么比呢。。