2014-09-21 63 views
0

我在MySQL中有一个查询,它基本上返回了大约500万行表中的大量分组结果。我是由8个独立的东西组成的,并且返回20列左右,其中许多是总和(case when when)计算。我知道这应该需要很长时间,而我的电脑并不是最快的(尽管它不是特别慢)。但它已经运行了9个小时,仍然没有完成。这是正常的吗?似乎没有什么东西需要这么长时间。MySQL Query不会停止运行

+1

9小时太长,那些列上是否有适当的索引,您可以发布表格模式和查询以查看 – radar 2014-09-21 01:16:21

+1

你可以发布你的SQL?你使用了很多子查询吗? – underscore 2014-09-21 01:21:12

+0

没有索引。知道这一点,你是否仍然认为9小时太长?我并不是很熟练掌握SQL,也没有想过要在列上放置索引。 – japem 2014-09-21 01:24:36

回答

0

问:这是正常的吗?

A:对于产生大量中间结果集的查询,查询可能运行很长时间,甚至超过9个小时。

对于执行不合理数量工作的查询来说,花费过长的时间并不是不正常的。

但我们通常会避免编写查询来完成异常数量的工作。

至于为什么查询做了这么多的工作......可能是一个非常低效的执行计划,不使用JOIN操作的索引或巨大的中间结果集。

从另一个会话中,您可以执行SHOW PROCESSLIST来验证查询是否真正在运行。输出将包括会话已经处于当前状态的已用时间...