MySQL查询赢了';不要停止跑步

MySQL查询赢了';不要停止跑步,mysql,sql,Mysql,Sql,我在MySQL中有一个查询,它基本上是从一个约500万行的表返回大量分组结果。我用8个不同的东西进行分组,并返回20个左右的列,其中许多是sum(case-when())计算。我知道这需要很长时间,而且我的电脑不是最快的(虽然它不是特别慢)。但它已经运行了9个小时,仍然没有完成。这正常吗?似乎没有什么事情需要这么长时间。问:这正常吗 答:对于一个生成大量中间结果集的查询,一个查询可能运行很长时间,甚至超过9个小时 对于一个工作量不合理的查询来说,花费不合理的时间并不是不正常的 但我们通常避免编写

我在MySQL中有一个查询,它基本上是从一个约500万行的表返回大量分组结果。我用8个不同的东西进行分组,并返回20个左右的列,其中许多是sum(case-when())计算。我知道这需要很长时间,而且我的电脑不是最快的(虽然它不是特别慢)。但它已经运行了9个小时,仍然没有完成。这正常吗?似乎没有什么事情需要这么长时间。

问:这正常吗

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

对于一个工作量不合理的查询来说,花费不合理的时间并不是不正常的

但我们通常避免编写工作量异常的查询

至于为什么查询要做这么多工作。。。可能是一个非常低效的执行计划,没有使用索引进行连接操作,或者是一个巨大的中间结果集


在另一个会话中,您可以执行
showprocesslist
,以验证查询是否正在实际运行。输出将包括会话处于当前状态所经过的时间…

9小时太长,这些列上是否有适当的索引,您可以发布表架构和查询以查看是否可以发布sql?您使用了很多子查询吗?没有索引。知道了这一点,你还认为9小时太长吗?我对SQL不是很精通,也没有想过在列上添加索引。是的,您可以添加索引并尝试。还要检查执行计划,查看已经记录的查询所花费的时间,确定索引,并且可以在单个索引中使用多个列。请发布您的查询,因为结构也会对引擎如何处理执行计划的解释产生很大影响。