如何检测查询是否在“发送数据”状态下运行

时间:2015-07-31 12:17:47

标签: mysql sql

我读了一些关于“发送数据”状态的解释,但是如果查询正在运行,我仍然无法获得。他们说“发送数据”意味着服务器向客户端发送一些数据但我真的不发送哪些数据。

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

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

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

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

1 个答案:

答案 0 :(得分: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,"%");