【问题标题】:Different execution of the same query for Inline query and a stored procedure内联查询和存储过程的相同查询的不同执行
【发布时间】:2017-05-21 23:06:07
【问题描述】:

我正在尝试将一个表与其自身交叉连接。

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。

【问题讨论】:

    标签: mysql sql stored-procedures mysql-workbench


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-06-17
      • 2016-11-17
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多