Mysql 5.5的Mysql查询建议
我有一个在mysql 5.6中运行的查询,但在5.5中需要10秒才能执行,我知道旧版mysql中的NOT in子句存在性能问题,但我没有看到在旧版mysql中处理它的其他方法,我非常感谢您的建议:Mysql 5.5的Mysql查询建议,mysql,Mysql,我有一个在mysql 5.6中运行的查询,但在5.5中需要10秒才能执行,我知道旧版mysql中的NOT in子句存在性能问题,但我没有看到在旧版mysql中处理它的其他方法,我非常感谢您的建议: SELECT DISTINCT C.chapter, J.name FROM chart as C INNER JOIN resume as J ON J.serie_id = C.serie_id WHERE chapter NOT IN ( SELECT DISTINCT chap
SELECT
DISTINCT C.chapter,
J.name
FROM chart as C
INNER JOIN resume as J ON J.serie_id = C.serie_id
WHERE chapter NOT IN
(
SELECT DISTINCT chapter FROM chart WHERE recorded = '0000-00-00'
)
AND
(
C.chapter NOT IN
(
SELECT chapter FROM chart_2
)
)
ORDER BY chapter DESC
基本上,它所做的是从图表表中选择唯一的章节,并从联接表中选择名称,然后从图表表中再次选择日期为0000-00-00的唯一章节,即尚未记录的章节,并使用not it进行匹配以排除第一个子查询中的章节。我使用distinct是因为在图表表中,章节可以重复几次,我只想选择那些记录为单个结果的章节(比如对它们进行分组)。最后检查图表2表中是否不存在该章节。它在mysql 5.6上运行正常,但在5.5中需要很长时间。有什么想法吗?可以试试看
SELECT
DISTINCT C.chapter,
J.name
FROM chart as C
INNER JOIN resume as J ON J.serie_id = C.serie_id
LEFT OUTER JOIN chart C1 ON C.chapter = C1.chapter AND C1.recorded = '0000-00-00'
LEFT OUTER JOIN chart_2 C2 ON C.chapter = C2.chapter
WHERE C1.chapter IS NULL
AND C2.chapter IS NULL
ORDER BY C.chapter DESC
就我个人而言,像这样的查询太多了,我发现最好是为in子句的单独查询获取一个值列表,而不是使用子查询 因此,从记录为“0000-00-00”的图表中选择不同的章节,获得一组结果
然后从图表2中选择章节,组合它们,然后将它们添加到您的查询中。您是否已经尝试对此查询进行解释?是的,使用解释并查看它的外观。好的,我会返回报告确定我看到键入所有键空和可能的键空不好是的,不好。确保在连接键上有索引,并在记录的章节表上添加索引。