当MySQL处于“发送数据”状态时,它意味着什么?

时间:2012-04-27 08:20:04

标签: mysql

如果Mysql查询是什么意思:

SHOW PROCESSLIST;

在State列中返回“发送数据”?

我想这意味着查询已经执行并且MySQL正在向客户端发送“结果”数据,但我想知道为什么它花了这么多时间(最多一个小时)。

谢谢。

2 个答案:

答案 0 :(得分:212)

这是一种误导性的状态。它应该被称为“读取和过滤数据”。

这意味着MySQL有一些数据存储在磁盘(或内存)中,而这些数据尚未被读取和发送。它可能是表本身,索引,临时表,排序输出等。

如果你有1M记录表(没有索引),你只需要一条记录,MySQL仍然会在扫描表时输出状态为“发送数据”,尽管事实上它还没有发送什么都没有。

答案 1 :(得分:16)

在这种状态下:

  

线程是 读取和处理a的行   SELECT语句 ,并将数据发送到客户端。

     

因为在此状态期间发生的操作倾向于执行   大量磁盘访问(读取)

这就是为什么需要更多时间才能完成的原因,在给定查询的生命周期中运行时间最长的状态也是如此。