ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.那么其他数据库的解析顺序都是这样么

解决方案 »

  1.   

    一样,where 后面是跟条件语句的~~~ select * from db where id=XXXX and age=XXX
      

  2.   

    根据SQL技术内幕的说明,SQL Server是从上而下的解释where条件的。所以,过滤性最强的应放在靠近where的地方。
      

  3.   

    ----sql server2005数据执行顺序:
    --8)  SELECT (9) DISTINCT (11) <TOP_specification> <select_list> 
    --(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> 
    --(10) ORDER BY <order_by_list> 
      

  4.   

    SQL Select语句完整的执行顺序: 1、from子句组装来自不同数据源的数据; 
    2、where子句基于指定的条件对记录行进行筛选; 
    3、group by子句将数据划分为多个分组; 
    4、使用聚集函数进行计算; 
    5、使用having子句筛选分组; 
    6、计算所有的表达式; 
    7、使用order by对结果集进行排序。 
    另外:一个查询语句各个部分的执行顺序: 
    --8)  SELECT (9) DISTINCT (11) <TOP_specification> <select_list> 
    --(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> 
    --(10) ORDER BY <order_by_list> 
      

  5.   

    这东西对于大数据量的sql优化肯定是有用的,有些细节还是需要了解下的求高手解释下
      

  6.   

    同在where里,分析引擎应该会自动优化的吧
      

  7.   

    你可以在WHERE后面写不同顺序的条件,然后看下执行计划。
      

  8.   

    你可以看一下查询计划,就知道执行顺序了。
    首先是根据WHERE和ON中的常量比较条件,读取需要的表和索引,存放在一些临时表中。
    然后根据变量比较条件进行筛选,期间可能会生成一些临时列。
    然后根据连接条件进行临时表间的连接。
    然后是对连接生成的数据进行分组、生成派生列
    然后是排序,输出。大概就是这样了,喵。
      

  9.   

    嗯,感谢楼上兄弟,
    sql的执行顺序这个我了解,我是在问where子句中的解析顺序,不太一样吧,求高人啊sql优化器?这是什么东西?这么智能么,自动优化sql语句?
      

  10.   

    我觉得where子句的顺序没有影响,使用ctrl+l运行一下,可以看到执行计划是一样的