【问题标题】:How to detect if query is running in the state “Sending data”如何检测查询是否在“发送数据”状态下运行
【发布时间】:2015-07-31 12:17:46
【问题描述】:

我阅读了一些关于“发送数据”状态的解释,但我仍然不知道查询是否正在运行。他们说“发送数据”是指服务器向客户端发送一些数据,但我真的不知道发送的是哪些数据。

What does it mean when MySQL is in the state "Sending data"?

我使用 Mysql Workbench 运行了一些查询,并且在执行此查询时,Workbench 超时(10 分钟后)。然后我运行“show processlist”命令来查看查询是否继续执行。它说我的查询状态是“发送数据”。

顺便说一下,logs 表有 1000 万条记录。所以这个查询必须在 10 小时内完成。我只想知道我的查询是否真的还在执行?

update logs join user
set logs.userid=user.userid
where logs.log_detail LIKE concat("%",user.userID,"%");

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    当它在进程列表中时,它仍在运行。我假设您的查询运行速度非常慢,因为您正在执行交叉连接(这意味着您将一个表的每一列连接到另一个表的每一列,这可能会产生大量数据,因此我进一步假设,您的查询不执行,您认为它执行的操作)并且在 where 子句上不能使用索引。您可能正在对大量数据进行全表扫描。您可以通过explain <your query>; 来验证这一点。
    为避免交叉连接,请在 on 子句中指定连接,例如

    update logs join user ON logs.userid = user.userid
    set logs.whatever = user.whatever
    where logs.log_detail LIKE concat("%",user.userID,"%");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多