有人可以告诉我这两个问题中哪一个比另一个好,为什么? 我应该使用连接吗?
select * from grandChildTable gct
where exists(
select * from childTable ct
where some condition
and gct.parentId = ct.Id
and exists(
select * from Table t
where some other condition
and ct.parentId = t.Id))
select * from grandChildTable gct
where exists(
select * from childTable ct
where some condition
and gct.parentId = ct.Id)
and exists(
select * from Table t
where some other condition
and gct.grandParentId = t.Id)
注意:
GrandChildTable
包含ChildTable
和Table
的ID,因为ID是复合的。
这些表没有任何其他参考。
表之间的关系是:
GrandChild to Child
n:1
Child to Table
n:1
答案 0 :(得分:0)
在这种情况下(与您的子行数较少的父表相比),使用JOIN可能差别不大。然而,EXISTS通常更快,并证明了这一点。
我还希望优化器为基于2个EXISTS的计划生成相同的计划:examine the query plans并查看是否存在任何差异(同样this Red Gate link)。如果没有,请寻求可读性。