我必须在两个父 - 子关系(1:n)表中搜索,但在结果集中,我只需要父表的字段。什么是最有意义的方式来做到这一点?它是以下简化结构之一...SQL Server:从两个表获取数据的高性能方式
SELECT parent.fields FROM parent LEFT OUTER JOIN child ON [JoinExpr]
Where [ParentFilter] OR [ChildFilter] GROUP BY parent.fields
SELECT DISTINCT(parent.fields) FROM parent LEFT OUTER JOIN child ON [JoinExpr]
Where [ParentFilter] OR [ChildFilter]
SELECT parent.fields FROM parent Where [ParentFilter]
OR parent_id IN(SELECT parent_id FROM child WHERE [ChildFilter])
......还是有其他更好的可能性吗?数据将由ado.net查询。
答案可能取决于您在每个表中有多少行...... JOIN的倾向于比大型数据集更好地执行(取决于索引顺序和其他因素) , WHERE EXISTS可能对小数据集执行略微更好 – 2011-01-07 09:23:04
@neil fenwick:您能否证明,考虑到事实上您可能需要DISTINCT加入? – gbn 2011-01-07 09:26:45
@Neil Fenwick:可能有很多行返回(几千),但在大多数情况下,只有少数(10到200) – HCL 2011-01-07 09:43:53