内联查询和存储过程的同一查询的不同执行

时间:2017-01-07 05:58:30

标签: mysql sql stored-procedures mysql-workbench

我正试图与自己交叉加入一个表。

select u1.userid,u2.userid from users as u1 join users as u2

当我在行查询中编写此查询时,它会在0.183 sec中执行。

但是,当我将相同的查询放入我想用于进一步处理的例程中时,需要花费太多时间(approx 500-600 seconds)

CREATE DEFINER=root`@`localhost PROCEDURE Test_Cross_Join()  
BEGIN
select u1.userid,u2.userid from users as u1 join users as u2;  
END  

事实上它实际上只执行了一次,从中我能够获得大致的持续时间。但是在大多数情况下,当我试图调用该程序时,"MySQL Workbench"没有响应并且强行关闭。用户表包含16000 rows。当我搜索在线查询的执行时间和执行时间我没有得到任何满意的答案,因为大多数答案都说应该没有时间差。我想知道为什么在没有任何单一的代码更改的情况下执行相同查询时会有如此多的时间差异。我在ubuntu 16.04上使用mysql版本5.7.16。

1 个答案:

答案 0 :(得分:0)

最后我得到了解决方案。实际上问题是在内联查询执行期间,行被限制为50000,因此它很容易显示所有行,但例程(存储过程)实际上是在尝试返回所有行(16,000 * 16,000)MySQL工作台无法显示的行。因此,在执行存储过程期间,获取持续时间太长。这就是它强行关闭的原因。 很抱歉发布了错误的问题,如果我通过发布此问题误导了您,我很抱歉。无论如何谢谢你们。