Logical query-processing phases
Logical query-processing phases in brief


(1) FROM
This phase identifies the query’s source tables and processes table operators.
Each table operator applies a series of subphases.
For example, the phases involved in a join are
(1-J1) Cartesian Product, (1-J2) ON Predicate, (1-J3) Add Outer Rows.
This phase generates virtual table VT1.
(1-J1) Cartesian Product
This phase performs a Cartesian product (cross join)
between the two tables involved in the table operator, generating VT1-J1.
(1-J1) Cartesian Product This
This phase filters the rows from VT1-J1 based on the predicate
that appears in the ON clause (<on_predicate>).
Only rows for which the predicate evaluates to TRUE are inserted into VT1-J2.
(1-J3) Add Outer Rows
If OUTER JOIN is specified (as opposed to CROSS JOIN or INNER JOIN),
rows from the preserved table or tables for which a match was not found
are added to the rows from VT1-J2 as outer rows, generating VT1-J3.
(2) WHERE
This phase filters the rows from VT1 based on the predicate that appears in the WHERE clause (<where_predicate>).
Only rows for which the predicate evaluates to TRUE are inserted into VT2.
(3) GROUP BY
This phase arranges the rows from VT2 in groups based on the set of expressions
(aka, grouping set) specified in the GROUP BY clause, generating VT3. Ultimately,
there will be one result row per qualifying group.
(4) HAVING
This phase filters the groups from VT3 based on the predicate that
appears in the HAVING clause (<having_predicate>). Only groups for
which the predicate evaluates to TRUE are inserted into VT4.
(5) SELECT
This phase processes the elements in the SELECT clause, generating VT5.
(5-1) Evaluate Expressions
This phase evaluates the expressions in the SELECT list, generating VT5-1.
(5-2) DISTINCT
This phase removes duplicate rows from VT5-1, generating VT5-2.
(6) ORDER BY
This phase orders the rows from VT5-2 according to the list specified in the ORDER BY clause,
generating the cursor VC6. Absent an ORDER BY clause, VT5-2 becomes VT6.
(7) TOP | OFFSET-FETCH
This phase filters rows from VC6 or VT6 based on the top or offset-fetch specification,
generating VC7 or VT7, respectively. With TOP, this phase filters the specified
number of rows based on the ordering in the ORDER BY clause, or based on arbitrary order
if an ORDER BY clause is absent. With OFFSET-FETCH, this phase skips the specified number of rows,
and then filters the next specified number of rows, based on the ordering in the ORDER BY clause.
The OFFSET-FETCH filter was introduced in SQL Server 2012.
to be end
Logical query-processing phases的更多相关文章
- Inside TSQL Querying - Chapter 1. Logical Query Processing
Logical Query Processing Phases Summary (8) SELECT (9) DISTINCT (11) <TOP_specification> <s ...
- Sentry 监控 - Snuba 数据中台架构(Query Processing 简介)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Inside TSQL Querying - Chapter 2. Physical Query Processing
Summary Description The SQL language is spoken by most database experts, and all relational database ...
- CMU Database Systems - Query Processing
Query Model Query处理有三种方式, 首先是Iterator model,这是最基本的model,又称为volcano,pipeline模式 他是top-down的模式,通过next函数 ...
- adaptive query processing
http://www.cs.umd.edu/~amol/talks/VLDB07-AQP-Tutorial.pdf https://www.cis.upenn.edu/~zives/research/ ...
- In-Stream Big Data Processing
http://highlyscalable.wordpress.com/2013/08/20/in-stream-big-data-processing/ Overview In recent y ...
- SQL optimizer -Query Optimizer Deep Dive
refer: http://sqlblog.com/blogs/paul_white/archive/2012/04/28/query-optimizer-deep-dive-part-1.aspx ...
- [转载]MongoDB学习 (五):查询操作符(Query Operators).1st
本文地址:http://www.cnblogs.com/egger/archive/2013/05/04/3059374.html 欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 查询操作符(Quer ...
- Deploying Customizations in Oracle E-Business Suite Release 12.2
DeployingCustomizations in Oracle E-Business Suite Release 12.2 This documentdescribes how to deploy ...
- Microsoft SQL Server Trace Flags
Complete list of Microsoft SQL Server trace flags (585 trace flags) REMEMBER: Be extremely careful w ...
随机推荐
- [Python] from scipy import sparse 报 DLL load failed:找不到指定模块错误
依赖vc运行环境.需要安装 vc_redist Py3.5要安装2015版 传送门: https://www.microsoft.com/zh-CN/download/details.aspx?id= ...
- dom 无法找到 body节点问题
最近在学习html dom节点知识时候,对照代码自己敲了一边,始终获取不到文档中的body对象,代码如下(未修改前): <!doctype html> <html> <h ...
- 安装和卸载windows服务 bat
1. 安装 windows服务 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil [服务路径](例:C:\\test\myt ...
- (转)Sql日期时间格式转换
sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-0 ...
- maven实战(04)_在pom中使用properties
使用常量不仅让代码变得简洁,更重要的是可以避免重复,在需要更改的时候,只需要修改一处,降低了错误发生的概率. <project> <modelVersion>4.0.0< ...
- css3渐变
background:-webkit-linear-gradient | radial-gradient (水平起点 垂直起点 , 颜色1 百分比%, 颜色2 百分比%, ... ,颜色N 100 ...
- Typescript基础类型
1.布尔值__boolean 2.数字__number----除了支持十进制和十六进制字面量,Typescript还支持ECMAScript 2015中引入的二进制和八进制字面量. 3.字符串__st ...
- matlab更改打开时候默认路径
每次打开matlab都会的修改默认路径,是一件有些烦恼的事情.所以,就想尝试更改默认路径 方法如下: 1.在matlab安装目录,找到toolbox文件夹,打开local文件件,打开matlabrc. ...
- Mac Vim + ctags 实现多目录跳转
set tags=tags; set autochdir :wq保存. 在源码根目录中输入ctags -R命令.后重启vim,打开src文件,就能使用Ctrl+] 或 g Ctrl+] 来实现跳转了. ...
- iOS UIButton 设置图片平铺
UIImage *image2 = [UIImage imageNamed:imgName]; CGFloat top = ; // 顶端盖高度 CGFloat bottom = ; // 底端盖高度 ...