2

我有一个查询,我想根据详细信息是否满足特定条件返回主行。

例如,如果至少有一个 Detail 行具有 SomeProperty = X,我只想返回特定的 Master 行。

基于以下谓词:

        predicate = predicate.And(p =>
                                  p.BasketItems.Where(obi => obi.BasketItemTypeID ==
                                                                  (int) BasketType.Refund).Count() > 0);

生成以下 SQL:

SELECT COUNT(*)
    FROM [dbo].[BasketItems] AS [t3]
    WHERE ([t3].[BasketId] = [t0].[OrderBasketID]) AND ([t3].[BasketItemTypeID] = 3)
    )) > 0)

问题在于它正在执行表扫描,因此查询需要一段时间才能运行。

只是检查我没有做任何疯狂的事情,想知道是否有什么可以加快这个查询的速度?

谢谢邓肯

4

1 回答 1

1
select M.basketID, max(M.field1) as field1, max(M.field2) as field2 
from dbo.basketItems as M
Inner join detail on M.basketID = detail.basketID
where detail.basketItemTypeID = '3'
group by M.basketID

(将主数据加入明细。选择明细具有所需标准的所有行。将结果行压缩到每条主记录 1 个。)

于 2011-06-23T02:42:43.763 回答