# 20200916-查询大量数据,为什么MySQL服务端内存不会溢出
MySQL是“边读边发”,也就是说MySQL服务端并不需要保存一个完整的结果集合。步骤如下:
1.按顺序读取查询到的记录,每读取一行就写入net_buffer(net_buffer由参数net_buffer_length控制大小,默认是16K)
2.当没有结果数据或者net_buffer被写满,则将net_buffer数据写入本地网络栈(socket send buffer),然后发送
3.如果发送成功,就清空net_buffer,否则阻塞
由此可知一个查询在发送过程中,占用的MySQL内部的内存最大就是net_buffer_length 这么大。