T-SQL执行内幕(6)——返回结果

186 篇文章 6 订阅
130 篇文章 240 订阅

本文属于SQL Server T-SQL执行内幕系列

 



    在执行引擎按照执行计划的要求把数据成功检索之后,就需要把数据返回给客户端。这里的结果不是单纯的数据库引擎完成查询数据之后的结果,而是客户端(如SSMS)接收到数据的结果。一旦数据已经“填满”执行树的各个操作符,那么最顶端的根操作符就会负责把数据写入网络缓存(network buffer)并把这些数据发送给客户端。

    结果集并不是直接写到中间存储(如内存或磁盘)然后发送到客户端,而是在创建时(查询执行时)就发送返回。不过由于受限于网络协议中的流量控制等制约,如果客户端没有积极处理结果(如使用SqlDataReader.Read()),则网络将限制发送端(即正在执行的查询)使其暂停操作,所以有可能一个查询要执行很久。一旦网络解除限制,查询将恢复执行然后继续发送数据。

    有一个特殊情景,使用了OUTPUT参数,为了返回output的信息,这个output信息会写入到网络数据流中一并返回,但是这个值只会在执行结束后返回,也代表着执行完成。而其他场景是一边执行一边发送。

    另外要再次提醒,结果的发送同样需要转换为TDS格式通过网络协议发送到客户端。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值