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

这是什么意思,如果Mysql查询:

SHOW PROCESSLIST; 

返回状态列中的“发送数据”?

我想这意味着查询已经执行,MySQL正在向客户端发送“结果”数据,但是我想知道为什么需要这么多时间(长达一个小时)。

谢谢。

这是一个相当误导的地位。 它应该被称为“读取和过滤数据”。

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

如果你有一个只有一条logging的1Mlogging表(没有索引), MySQL在扫描表时仍然会输出状态为“发送数据”,尽pipe它还没有发送任何东西。

在这种状态下:

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

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

这就是为什么它需要更多的时间来完成,并且是给定查询的生命周期中最长的运行状态