从 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相关推荐

  1. 《Microsoft Sql server 2008 Internal》读书笔记--第八章The Query Optimizer(1)

    <Microsoft Sql server 2008 Interna>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397.h ...

  2. 《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(5)

    <Microsoft Sql server 2008 Internals>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397 ...

  3. SQL Server 2008性能故障排查(二)——CPU

    原文: SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排 ...

  4. SQL Server 2008 R2 性能计数器详细列表(三)

    原文:SQL Server 2008 R2 性能计数器详细列表(三) SQL Server,Deprecated Features 对象: 监视指定为不推荐使用的功能: SQL Server Depr ...

  5. SQL Server 2008性能故障排查(三)——I/O

    接着上一章:CPU瓶颈 I/O瓶颈(I/O Bottlenecks): SQLServer的性能严重依赖I/O子系统.除非你的数据库完全加载到物理内存中,否则SQLServer会不断地把数据库文件从缓 ...

  6. 如何使用SQL Server 2008打开和关闭IDENTITY_INSERT?

    本文翻译自:How to turn IDENTITY_INSERT on and off using SQL Server 2008? Why am I getting an error doing ...

  7. 70-433 Microsoft SQL Server 2008, Database Development 考试感言

    今天通过了70-433 SQL SERVER 2008 数据库开发这门考试.考了2.5小时,65道题,700分通过.考试时间一共3小时20分. 准备这门考试,大概花了我两周的业余时间.没看MOC的教材 ...

  8. 【视频】SQL Server 2008 R2 StreamInsight - 多源复杂事件处理

    新浪视频链接:http://video.sina.com.cn/v/b/35171143-1700099614.html SQL Server 2008 R2新提供的StreamInsight组件支持 ...

  9. 基于Sql Server 2008的分布式数据库的实践(五)

    基于Sql Server 2008的分布式数据库的实践(五) 原文 基于Sql Server 2008的分布式数据库的实践(五) 程序设计 ------------------------------ ...

最新文章

  1. Windows 2003 + ISA 2006+单网卡×××配置(4)
  2. 完全平方数的判定及整数平方根的快速求解
  3. Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制
  4. SmartCode 使用常见问题
  5. 《程序员在第一季度追姐姐的书》——提升自己的形象气质
  6. 如何正确编写linux守护进程
  7. 学成在线--20.新增课程(最后完善)
  8. 论文浅尝 | Iterative Cross-Lingual Entity Alignment Based on TransC
  9. C#设计模式之1-工厂方法模式
  10. 【人工智能中“预测”的知识点】
  11. Camera HW组成(二十六)
  12. Ubuntu的以太网卡找不到解决方法
  13. js中for-in的用法
  14. CUDA之nvidia-smi命令详解
  15. endnote参考文献排版_如何用 EndNote 编辑适合投稿杂志的参考文献格式
  16. 免费数据 | CnOpenData空气质量站点监测数据
  17. Biopython操作DNA,RNA和蛋白质序列
  18. 奇点临近:人工智能让人类变成软件,并迅速统治宇宙
  19. java双人俄罗斯方块_双人版俄罗斯方块
  20. JSP运行出现源代码的情况之一

热门文章

  1. 单片机计算机加减乘除汇编,运用单片机进行加减乘除法的运算
  2. 计算机缓存怎样更改,UC浏览器电脑版怎么修改缓存位置
  3. 制作winpe,linux,maxdos三合一u盘启动盘,制作winPE、Linux、maxdos三合一U盘启动盘
  4. Python中等差数列求和!!
  5. Android隐藏底部虚拟按键并全屏
  6. NAP功能,必须了解的知识
  7. 关于银行利率利差的思考
  8. YOLO on TX1
  9. [FROM LUOGU]P1600 【NOIP2016DAY1T2】天天爱跑步
  10. 九阴真经服务器一直维护,《九阴真经》全区服维护 修复跨服卡buff