我有一个查询,我想根据细节是否符合某个标准来返回Master行。
例如,如果至少其中一个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)
问题在于它正在进行表扫描,因此查询需要一段时间才能运行。
只是检查我没有做任何疯狂的事情,并想知道是否有什么可以加速这个查询?
由于 邓肯
答案 0 :(得分: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
(将master加入到detail中。选择所有细节都具有所需条件的行。将每个主记录的结果行缩小为1。)