刚才在网上看到如下,
  ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.
那么,sqlserver 呢?有这样的说法吗,请指教!

解决方案 »

  1.   

    sql server会由查询优化器..优化..所以不一定会先处理最左边的..不过也可以指定..
      

  2.   

    sql server 默认情况下自动实现这个功能.也可以指定按写的表名的顺序.命令想不起来了,好像是f开头的单词.
      

  3.   

    比如..
    select c.companyName,s.CompanyName
    from Customers as c
     join Orders o
      on o.CustomerID=c.CustomerID
     join Products p
      on o.ProductID=p.ProductID
     join Suppliers s
      on s.SupplierID=p.SupplierID
    ---------------
    这个查询中..顺序不一定是Customers->Products->Suppliers的顺序..因为优化器会处理..不过可以指定..select c.companyName,s.CompanyName
    from Customers as c
     join Orders o
      on o.CustomerID=c.CustomerID
     join Products p
      on o.ProductID=p.ProductID
     join Suppliers s
      on s.SupplierID=p.SupplierID
    Option (Force Order)
    ------------
    这样指定后..就是按Customers->Products->Suppliers的顺序
      

  4.   

    SQL server会基于开销进行优化,不一定从左至右,也不一定从右至左
      

  5.   

    FORCE ORDER
    影响语句中的所有运算符。您可以指定在整个查询过程中使用的查询提示。查询提示在 OPTION 子句中指定,是 OPTION 子句的一部分。 
    指定在优化查询过程中,保留由查询语法标明的联接次序。适用范围
    DELETE (SQL Server Mobile)
    INSERT (SQL Server Mobile)
    SELECT 语句 (SQL Server Mobile)
    UPDATE (SQL Server Mobile)当查询提示与 SQL Server 2005 Mobile Edition 一起使用时,只能使用一个参数:
      

  6.   

    SQL里面from后面直接跟多个表是连接操作,从左到右
      

  7.   

    联机文档:
    FORCE ORDER 查询提示
    查询提示指定应在整个查询中使用指示的提示。查询提示影响到语句中的所有运算符。如果主查询中涉及 UNION,则只有涉及 UNION 运算符的最后一个查询才能有 OPTION 子句。查询提示作为 OPTION 子句的一部分指定。如果一个或多个查询提示导致查询优化器不生成有效计划,则产生 8622 错误。注意:  
    由于 SQL Server 查询优化器通常会为查询选择最优的执行计划,因此我们建议,只有在最后不得不用时才可由资深的开发人员和数据库管理员来使用提示。