SQL 执行顺序和性能优化


一:查询的逻辑执行顺序
 (1) FROM < left_table> 


 (3) < join_type>  JOIN < right_table>   (2) ON < join_condition> 


 (4) WHERE < where_condition> 


 (5) GROUP BY < group_by_list> 


 (6) WITH {cube | rollup}


 (7) HAVING < having_condition> 


 (8) SELECT  (9) DISTINCT (11) < top_specification>  < select_list> 


 (10) ORDER BY < order_by_list> 


 标准的SQL 的解析顺序为:


 (1).FROM 子句 组装来自不同数据源的数据


 (2).WHERE 子句 基于指定的条件对记录进行筛选


 (3).GROUP BY 子句 将数据划分为多个分组


 (4).使用聚合函数进行计算


 (5).使用HAVING子句筛选分组


 (6).计算所有的表达式


 (7).使用ORDER BY对结果集进行排序


二 执行顺序:


   


 1.FROM:对FROM子句中前两个表执行笛卡尔积生成虚拟表vt1


 2.ON:对vt1表应用ON筛选器只有满足< join_condition> 为真的行才被插入vt2


 3.OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行将行作为外部行添加到vt2 生成t3如果from包含两个以上表则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束


 4.WHERE:对vt3应用 WHERE 筛选器只有使< where_condition> 为true的行才被插入vt4


 5.GROUP BY:按GROUP BY子句中的列列表对vt4中的行分组生成vt5


 6.CUBE|ROLLUP:把超组(supergroups)插入vt6 生成vt6


 7.HAVING:对vt6应用HAVING筛选器只有使< having_condition> 为true的组才插入vt7


 8.SELECT:处理select列表产生vt8


 9.DISTINCT:将重复的行从vt8中去除产生vt9


 10.ORDER BY:将vt9的行按order by子句中的列列表排序生成一个游标vc10


 11.TOP:从vc10的开始处选择指定数量或比例的行生成vt11 并返回调用者


     


         看到这里,那么用过linqtosql的语法有点相似啊?如果我们我们了解了sqlserver执行顺序,那么我们就接下来进一步养成日常sql好习惯,也就是在实现功能同时有考虑性能的思想,数据库是能进行集合运算的工具,我们应该尽量的利用这个工具,所谓集合运算实际就是批量运算,就是尽量减少在客户端进行大数据量的循环操作,而用SQL语句或者存储过程代替。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值