我的测试sql语句如下:
set statistics time on;
set statistics io on;
use Northwind;
go
drop index dbo.MyOrders.oid;
create clustered index oid on dbo.MyOrders(OrderID);
drop index dbo.MyOrderDetails.pkoid;
create clustered index pkoid on dbo.MyOrderDetails(OrderID,ProductID);
select o.OrderID,o.OrderDate,od.ProductID,od.Quantity
from dbo.MyOrders as o
join dbo.MyOrderDetails as od
on o.OrderID=od.OrderID;

解决方案 »

  1.   

    难道表不一样,优化器就区别对待?
    表是复制过来的,除了索引是我自己添加的以外,其他的都是直接用select into 复制来的
      

  2.   

    即使是源表,不同版本的SQL Server、Nothwind都有可能影响结果
      

  3.   


    那该如何根据hash join的信息来创建索引呢?
      

  4.   

    try this,drop index dbo.MyOrders.oid;create clustered index oid on dbo.MyOrders(OrderID);drop index dbo.MyOrderDetails.pkoid;create clustered index pkoid on dbo.MyOrderDetails(OrderID);
    select o.OrderID,o.OrderDate,od.ProductID,od.Quantity
    from dbo.MyOrders as o
    inner join dbo.MyOrderDetails as od on o.OrderID=od.OrderID;
    order by o.OrderID
      

  5.   

    消息 156,级别 15,状态 1,第 9 行
    关键字 'order' 附近有语法错误。
      

  6.   

    试试这个,看执行计划是否有变.drop index dbo.MyOrders.oid;
     
    create clustered index oid on dbo.MyOrders(OrderID);
     
    drop index dbo.MyOrderDetails.pkoid;
     
    create clustered index pkoid on dbo.MyOrderDetails(OrderID);
     
     
    select o.OrderID,o.OrderDate,od.ProductID,od.Quantity
    from dbo.MyOrders as o
    inner join dbo.MyOrderDetails as od on o.OrderID=od.OrderID
    order by o.OrderID
      

  7.   

    nothing happened! Still the same, hash match!
      

  8.   

    问题已解决,关键是MyOrders表未把OrderID设置为主键,请问为何不是主键,索引就是失去作用了呢
      

  9.   

    问题已解决,关键是MyOrders表未把OrderID设置为主键,请问为何不是主键,索引就是失去作用了呢
      

  10.   

    主表和子表都是聚集表没错,索引都是聚集索引扫描,关键是聚集索引所在的列,不是关联两张表的列
    我是SqlServer2012的select * from [Purchasing].[PurchaseOrderHeader]
    聚集索引在PurchaseOrderIDselect * from [Purchasing].[PurchaseOrderDetail]
    聚集索引在PurchaseOrderDetailID
      

  11.   

    merge join的条件是在关联字段上排序的,这里在关联字段上并不是排序的(聚集索引列不一样)