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

如果 Mysql 查询:

SHOW PROCESSLIST;

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

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

谢谢你。

119941 次浏览

这是一种相当误导的状态,应该称之为“读取和过滤数据”。

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

如果您有一个1M 的记录表(没有索引) ,您只需要一个记录,MySQL将仍然输出状态为“发送数据”,同时扫描该表,尽管事实上它还没有发送任何东西。

MySQL 8.0.17及更高版本 : 此状态不再单独显示,而是包含在 执行状态中。

在这种情况下:

线程是 < strong > < em > 读取和处理 SELECT 语句 ,并向客户端发送数据。

因为在此状态下发生的操作往往会执行 大量磁盘访问(读取)

这就是为什么它需要更多的时间来完成,而且 运行时间最长的州在给定查询的生命周期内也是如此。