带子查询的MySql查询非常慢

时间:2013-12-17 21:47:39

标签: php mysql

我正在尝试运行此查询。这很慢。 30秒后我仍然没有结果。

  • 我在step,source,video_id上有索引。

  • 第1步是视频上传

  • 第4步是视频可供下载

  • 源5是视频类型

在encoding_history表中,我有很多次相同的video_id,包含不同的处理步骤(上传,编码......)

我的需求是在6个多小时前上传所有视频,但仍未准备下载。

如果删除子查询,则速度非常快。

我的表有大约6.000.000个条目。

$query = 'SELECT video_id FROM encoding_history WHERE 
video_id NOT IN (SELECT video_id FROM encoding_history WHERE step = 4 AND source = 5 GROUP BY video_id)
AND step = 1
AND source = 5
AND date_added > DATE_SUB(NOW(), INTERVAL 6 HOUR)';

有关如何加快结果的任何想法?感谢。

2 个答案:

答案 0 :(得分:1)

执行计划将有所帮助,因为您可能缺少有用的索引,但我认为这样可以更快地运行。

SELECT Eh1.video_id 
FROM encoding_history EH1
LEFT JOIN Encoding_history EH2 
  on EH2.step=4 and EH2.source=5 
  and EH1.step=1 and EH1.source=5
  AND EH1.date_added > DATE_SUB(NOW(), INTERVAL 6 HOUR)
WHERE Eh2.Video_ID is null

结果: 返回步骤1中源为5的所有Video_IDS 没有第4步的来源5。 这是在过去6小时内添加的。

答案 1 :(得分:0)

视频在步骤1和步骤4中无法同时进行,因此只需删除子查询

另一个问题(感谢xQbert)您可以将此操作移动到您的应用程序而不是数据库。