inside sql server 2008 - logical query processing
从 08 年开始读 inside sql server 2005, 一直到 inside sql server 2008, 似乎都是零星的去读一些片段,从没有整理过一点东西,也不知道有多少东西是自己真正知道的。所以以后读到一篇就做下笔记。
这篇是关于 Logical query processing, 逻辑查询处理过程。
select distinct | top (n) Filed1, Field2, Field3, ….Fieldn
from dbo.table1 tb1 with(Nolock)
inner join dbo.table2 tb2 with(no lock) on tbl.Field1 = tb2.Field1
where tbl1.Field2 = 'xxx'
group by tb1.Field3
having sum(tb1.Field4) > 20
order by tb2.Field2
就自己的理解:
1) 先处理两张表的笛卡尔积,相当于一个 full outer join
2) 根据 join type, 此处是 inner join, 所以各自舍去一部分在另一张表中找不到对应值的记录
3) 舍去不符合 where 条件的记录
4) 做 group by 并且舍去不符合 having 条件的记录
5) 做 distinct, top (n)
6) 按照 tb2.Field2 排序
更深一步的介绍, From 后面还有 4 中 table 运算:
1) Join ; 2) Apply ; 3) Pivot; 4) Unpivot
1) Join 的处理流程:
- 先计算笛卡尔积;
- 舍去不符合 on 条件的记录;
- 根据 left, right outer join, 补上 outer 部分的记录
2) Apply 的处理流程:
- 先将右边的表数据,应用到左边的表里面去
- 再根据 outer apply 或者 cross apply 补上或者舍去相应的记录
还有四种 set 集合运算:union [all] , except, intersect
(1) query 1 (2) <set__operation>(1) query 2(3) [ Order by <order_by_list> ]
这个地方就非常重要了, 因为 query 1 , query 2 是同时进行计算的, 所以集合操作要比 in 来得快
select a.*, b.*
from dbo.table1 tbl1 with(no lock)
inner join dbo.table2 tbl2 with(no lock) on tbl1.field1 = tbl2.field1
where tbl1.field2 in('xxx','yyy') or tbl2.field2 in('xxx','yyy')select a.*,b.*
from dbo.table1 tbl1 with(no lock)
inner join dbo.table2 tbl2 with(no lock) on tbl1.field1 = tbl2.field1
where tbl1.field2 in('xxx','yyy') union allselect a.*,b.*
from dbo.table1 tbl1 with(no lock)
inner join dbo.table2 tbl2 with(no lock) on tbl1.field1 = tbl2.field1
where tbl2.field2 in('xxx','yyy')
inside sql server 2008 - logical query processing相关推荐
- 《Microsoft Sql server 2008 Internal》读书笔记--第八章The Query Optimizer(1)
<Microsoft Sql server 2008 Interna>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397.h ...
- 《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(5)
<Microsoft Sql server 2008 Internals>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397 ...
- SQL Server 2008性能故障排查(二)——CPU
原文: SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排 ...
- SQL Server 2008 R2 性能计数器详细列表(三)
原文:SQL Server 2008 R2 性能计数器详细列表(三) SQL Server,Deprecated Features 对象: 监视指定为不推荐使用的功能: SQL Server Depr ...
- SQL Server 2008性能故障排查(三)——I/O
接着上一章:CPU瓶颈 I/O瓶颈(I/O Bottlenecks): SQLServer的性能严重依赖I/O子系统.除非你的数据库完全加载到物理内存中,否则SQLServer会不断地把数据库文件从缓 ...
- 如何使用SQL Server 2008打开和关闭IDENTITY_INSERT?
本文翻译自:How to turn IDENTITY_INSERT on and off using SQL Server 2008? Why am I getting an error doing ...
- 70-433 Microsoft SQL Server 2008, Database Development 考试感言
今天通过了70-433 SQL SERVER 2008 数据库开发这门考试.考了2.5小时,65道题,700分通过.考试时间一共3小时20分. 准备这门考试,大概花了我两周的业余时间.没看MOC的教材 ...
- 【视频】SQL Server 2008 R2 StreamInsight - 多源复杂事件处理
新浪视频链接:http://video.sina.com.cn/v/b/35171143-1700099614.html SQL Server 2008 R2新提供的StreamInsight组件支持 ...
- 基于Sql Server 2008的分布式数据库的实践(五)
基于Sql Server 2008的分布式数据库的实践(五) 原文 基于Sql Server 2008的分布式数据库的实践(五) 程序设计 ------------------------------ ...
最新文章
- Windows 2003 + ISA 2006+单网卡×××配置(4)
- 完全平方数的判定及整数平方根的快速求解
- Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制
- SmartCode 使用常见问题
- 《程序员在第一季度追姐姐的书》——提升自己的形象气质
- 如何正确编写linux守护进程
- 学成在线--20.新增课程(最后完善)
- 论文浅尝 | Iterative Cross-Lingual Entity Alignment Based on TransC
- C#设计模式之1-工厂方法模式
- 【人工智能中“预测”的知识点】
- Camera HW组成(二十六)
- Ubuntu的以太网卡找不到解决方法
- js中for-in的用法
- CUDA之nvidia-smi命令详解
- endnote参考文献排版_如何用 EndNote 编辑适合投稿杂志的参考文献格式
- 免费数据 | CnOpenData空气质量站点监测数据
- Biopython操作DNA,RNA和蛋白质序列
- 奇点临近:人工智能让人类变成软件,并迅速统治宇宙
- java双人俄罗斯方块_双人版俄罗斯方块
- JSP运行出现源代码的情况之一
热门文章
- 单片机计算机加减乘除汇编,运用单片机进行加减乘除法的运算
- 计算机缓存怎样更改,UC浏览器电脑版怎么修改缓存位置
- 制作winpe,linux,maxdos三合一u盘启动盘,制作winPE、Linux、maxdos三合一U盘启动盘
- Python中等差数列求和!!
- Android隐藏底部虚拟按键并全屏
- NAP功能,必须了解的知识
- 关于银行利率利差的思考
- YOLO on TX1
- [FROM LUOGU]P1600 【NOIP2016DAY1T2】天天爱跑步
- 九阴真经服务器一直维护,《九阴真经》全区服维护 修复跨服卡buff