绍兴信息港

当前位置:

子查询执行的顺序问题

2019/06/20 来源:绍兴信息港

导读

子查询执行的顺序问题(1) select * from t1 a(2) left join(select * from t2 whe

  子查询执行的顺序问题

  (1) select * from t1 a

  (2) left join(select * from t2 where ……)b

  (3) on a.f1=b.f1

  (4) where a.f2 ……

  -------------------------------------------------

  问题:

  执行顺序是 2、3、4、1

  还是 4、1、2、3

  还是……

  避免使用HAVING 子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处

  理需要排序,总计等操作. 如果能通过WHERE 子句限制记录的数目,那就能减少这方面的开

  销. (非oracle 中)on、where、having 这三个都可以加条件的子句中,on 是执行,whe

  re 次之,having ,因为on 是先把不符合条件的记录过滤后才进行统计,它就可以减少

  中间运算要处理的数据,按理说应该速度是快的, where 也应该比having 快点的,因为

  它过滤数据后才进行sum,在两个表联接时才用on 的,所以在一个表的时候,就剩下where

  跟having 比较了。在这单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,

  那它们的结果是一样的,只是where 可以使用rushmore 技术,而having 就不能,在速度上

  后者要慢如果要涉及到计算的字段,就表示在没计算之前,这个字段的值是不确定的,根据

  上篇写的工作流程,where 的作用时间是在计算之前就完成的,而having 就是在计算后才

  起作用的,所以在这种情况下,两者的结果会不同。在多表联接查询时, on 比where 更早

  起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where

  进行过滤,然后再计算,计算完后再由having 进行过滤。由此可见,要想过滤条件起到正

  确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里

痛经怎么调理的食谱
痛经怎么调理根治
痛经简单的止痛方法
标签