问题
你的服务器内存2G,你全表查询一个10g的表,内存会不会炸了。
答案
不会。逻辑如下,语句,select * from t;服务端不会存放完整的结果集,其流程和流很类似。
1.获取一行,写到net_buffer中。这个值由参数net_buffer_length决定,默认16k。
2.重复获取行,直到,写满net_buffer
3.若发送成功,就清空net_buffer,然后取下一行,写入搭配net_buffer。
4.如果发送函数返回EAGAIN,或者WSAEWOULDBLOCK。就表示本地网络栈满了,进入等待,直到可以重写,再继续发送。
参数
-quick:mysql_use_result方法,这个方法是读一行,处理一行。默认的话mysql_store_result这个接口。这个是把结果保存到本地内存。