首先简单了解一下SQL Server数据库引擎处理T-SQL语句的过程。
SQL Server数据库引擎在处理一条T-SQL语句时,一般都是经过三个步骤:解析-编译-执行。
解析,顾名思义,就是解释成数据库可以识别处理的语言。首先在语法上判断其正确性和完整性,从而保证语句能够正确地被编译和执行。解析的过程实际上是将T-SQL语句分解为对应的树的过程.一般地,基于SELECT的T-SQL查询语句分解为查询树(Query Tree),而基于复杂运算过程的的T-SQL语句被分解为顺序树(Sequence Tree).
编译,简单地说,就是将第一步解析出来的树翻译成数据库引擎识别的语言,生成相应的执行计划(Execution plan).执行计划,实际上就是查询优化器(Query Optimizer)对树所请求的资源进行综合评估(包括索引,I/O,成本,时间等等因素),生成一个最优的方案,此方案中包含了需要执行的任务列表,如:安全检查,约束检查,触发器检查等。
执行,就是将执行计划加载到内存然后运行。不同的处理语言被存储引擎发送到不同的组件中去运行然后将执行结果或者是错误代码返回。一般情况下,SQL Server会将该执行计划滞留在高速缓存中一段时间以保证该执行计划能够被重复调用。