SQL Server 2008中如何执行查询
我正在使用SQLServer2008,非常想知道引擎如何执行查询 假设我运行以下查询:SQL Server 2008中如何执行查询,sql,sql-server-2005,sql-server-2008,Sql,Sql Server 2005,Sql Server 2008,我正在使用SQLServer2008,非常想知道引擎如何执行查询 假设我运行以下查询: select * from <table1> with(nolock) select*from with(nolock) 或与连接相同: select * from <table1> a with(nolock) join <table2> b with(nolock) on a.<column1> = b.<column1> where &
select * from <table1> with(nolock)
select*from with(nolock)
或与连接相同:
select * from <table1> a with(nolock)
join <table2> b with(nolock) on a.<column1> = b.<column1>
where <some condition>
从带有(nolock)的列表中选择*
用a上的(nolock)连接b.=B
哪里
查询在幕后是如何工作的?有没有办法查看为执行和显示结果而执行的实际步骤?数据库引擎分析查询并选择在当前条件下检索请求数据的最佳方式
请参阅。数据库引擎分析查询并选择在当前条件下检索请求数据的最佳方式
请参见清单1-1逻辑查询处理步骤编号
(5) SELECT (5-2) DISTINCT (5-3) TOP(<top_specification>) (5-1) <select_list> (1) FROM (1-J) <left_table> <join_type> JOIN <right_table> ON <on_predicate> | (1-A) <left_table> <apply_type> APPLY <right_table_expression> AS <alias> | (1-P) <left_table> PIVOT(<pivot_specification>) AS <alias>| (1-U) <left_table> UNPIVOT(<unpivot_specification>) AS <alias> (2) WHERE <where_predicate> (3) GROUP BY <group_by_specification> (4) HAVING <having_predicate> (6) ORDER BY <order_by_list>;
(5)选择(5-2)不同的(5-3)TOP()(5-1)(1)从(1-J)连接到|(1-A)应用为|(1-P)PIVOT()作为|(1-U)UNPIVOT()作为(2),其中(3)分组方式(4)具有(6)排序方式;
逻辑查询处理阶段简介
■ (1) 从FROM阶段识别查询的源表和过程表
接线员。每个表运算符应用一系列子阶段。例如,阶段
连接涉及(1-J1)笛卡尔积,(1-J2)在过滤器上,(1-J3)添加外部行。
FROM阶段生成虚拟表VT1
■ (1-J1)笛卡尔积此阶段在
表格运算符中涉及的两个表格,生成VT1-J1
■ (1-J2)在过滤器上,此阶段根据以下谓词过滤VT1-J1中的行:
出现在ON子句()中。仅对谓词求值的行
若为真,则将其插入VT1-J2。
(1-J3)如果指定了外部连接,则添加外部行(与交叉连接或
内部联接),保留表中的行或未找到匹配项的表中的行
作为外部行添加到VT1-J2的行中,生成VT1-J3
■ (2) 其中,此阶段根据中出现的谓词过滤VT1中的行
WHERE子句()。仅谓词计算为的行
将TRUE插入VT2
■ (3) GROUP BY此阶段根据列分组排列VT2中的行
列出GROUP BY子句中指定的,生成VT3。最终会有一个
每组的结果行
■ (4) 此阶段根据以下谓词过滤VT3中的组:
出现在HAVING子句()中。仅适用于
谓词的计算结果为TRUE,并插入到VT4中
■ (5) 选择此阶段处理SELECT子句中的元素,生成VT5
■ (5-1)计算表达式此阶段计算选择列表中的表达式,
生成VT5-1
■ (5-2)DISTINCT此阶段从VT5-1中删除重复行,生成VT5-2
■ (5-3)顶部此阶段过滤指定的顶部行数或百分比
VT5-2基于ORDER by子句定义的逻辑顺序,生成
表VT5-3
■ (6) ORDER BY This phase根据列列表对VT5-3中的行进行排序
在ORDER BY子句中指定,生成游标VC6。清单1-1逻辑查询处理步骤编号
(5) SELECT (5-2) DISTINCT (5-3) TOP(<top_specification>) (5-1) <select_list> (1) FROM (1-J) <left_table> <join_type> JOIN <right_table> ON <on_predicate> | (1-A) <left_table> <apply_type> APPLY <right_table_expression> AS <alias> | (1-P) <left_table> PIVOT(<pivot_specification>) AS <alias>| (1-U) <left_table> UNPIVOT(<unpivot_specification>) AS <alias> (2) WHERE <where_predicate> (3) GROUP BY <group_by_specification> (4) HAVING <having_predicate> (6) ORDER BY <order_by_list>;
(5)选择(5-2)不同的(5-3)TOP()(5-1)(1)从(1-J)连接到|(1-A)应用为|(1-P)PIVOT()作为|(1-U)UNPIVOT()作为(2),其中(3)分组方式(4)具有(6)排序方式;
逻辑查询处理阶段简介
■ (1) 从FROM阶段识别查询的源表和过程表
接线员。每个表运算符应用一系列子阶段。例如,阶段
连接涉及(1-J1)笛卡尔积,(1-J2)在过滤器上,(1-J3)添加外部行。
FROM阶段生成虚拟表VT1
■ (1-J1)笛卡尔积此阶段在
表格运算符中涉及的两个表格,生成VT1-J1
■ (1-J2)在过滤器上,此阶段根据以下谓词过滤VT1-J1中的行:
出现在ON子句()中。仅对谓词求值的行
若为真,则将其插入VT1-J2。
(1-J3)如果指定了外部连接,则添加外部行(与交叉连接或
内部联接),保留表中的行或未找到匹配项的表中的行
作为外部行添加到VT1-J2的行中,生成VT1-J3
■ (2) 其中,此阶段根据中出现的谓词过滤VT1中的行
WHERE子句()。仅谓词计算为的行
将TRUE插入VT2
■ (3) GROUP BY此阶段根据列分组排列VT2中的行
列出GROUP BY子句中指定的,生成VT3。最终会有一个
每组的结果行
■ (4) 此阶段根据以下谓词过滤VT3中的组:
出现在HAVING子句()中。仅适用于
谓词的计算结果为TRUE,并插入到VT4中
■ (5) 选择此阶段处理SELECT子句中的元素,生成VT5
■ (5-1)计算表达式此阶段计算选择列表中的表达式,
生成VT5-1
■ (5-2)DISTINCT此阶段从VT5-1中删除重复行,生成VT5-2
■ (5-3)顶部此阶段过滤指定的顶部行数或百分比
VT5-2基于ORDER by子句定义的逻辑顺序,生成
表VT5-3
■ (6) ORDER BY This phase根据列列表对VT5-3中的行进行排序
在ORDER BY子句中指定,生成光标VC6。这是一个非常模糊的问题,您能更详细地解释一下您想问什么吗?你说的流动是什么意思?这是指接口流还是实际的后端机器编码执行?关于这个主题有很多书。如果你有具体问题,请提问。如果你