(2) SQL Server的SNI将TDS消息解包,读取SELECT语句,然后将这个SQL命令发送给命令解析器。
(3) 命令解析器在缓冲池的计划缓存中检查是否已经存在了一条与接收到的语句匹配且可用的查询计划。如果找不到,命令解析器则基于SELECT语句生成一个查询树,然后将查询树传递给查询优化器,让其生成查询计划。
(4) 由于这条查询命令非常简单,查询优化器仅在预优化阶段就生成了“零开销”的查询计划(或称为“普通”查询计划)。查询优化器将创建出来的查询计划发送给查询执行器执行。
(5) 查询执行器在执行查询计划的时候,首先确定完成这个查询计划需要读取什么数据,然后通过OLE DB接口向存储引擎中的访问方法发送访问数据请求。
(6) 为了完成查询执行器的请求,访问方法需要从数据库中读取一个数据页面,并要求缓冲区管理器提供这个数据页面。
(7) 缓冲区管理器在数据缓存中检查这个数据页面是否已经存在。由于这个页面并没有在数据缓存中,因此缓冲区管理器首先从磁盘上获取这个数据页面,然后将其存入缓存,并传回给访问方法。
(8) 最后,访问方法将结果集传递给关系引擎,由关系引擎将结果集发送给客户端。
基本的SELECT语句生命周期,布布扣,bubuko.com
原文:http://www.cnblogs.com/faith123/p/3572802.html