Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 5.5的Mysql查询建议_Mysql - Fatal编程技术网

Mysql 5.5的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

我有一个在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 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中选择章节,组合它们,然后将它们添加到您的查询中。

您是否已经尝试对此查询进行解释?是的,使用解释并查看它的外观。好的,我会返回报告确定我看到键入所有键空和可能的键空不好是的,不好。确保在连接键上有索引,并在记录的章节表上添加索引。