关于连接两个表与使用 2 个单独查询的二分法,我有一个简单的问题。
我希望找到一个现有的问题,但我的搜索并没有产生太多结果(大多数问题都是针对更复杂的问题)。
例如,考虑具有非常简单架构的两个表 A 和 X:
Table A +-------------+-------------+-------------+
| Column A (*)| Column X(FK)| Column C |
+-------------+-------------+-------------+
Table X +-------------+-------------+-------------+
| Column X (*)| Column Y | Column Z |
+-------------+-------------+-------------+
其中 A 列和 X 列是标识列和主键 (bigint)。表 A 和表 X 之间还存在列 X 的现有外键关系。
我的问题是,假设两个表都足够大(仅说 500K 行),我是否会从使用单个查询(参见下面的 Linq2Sql 伪代码)或使用两个单独的查询中获得更多的性能?
选项1:
long aValue = 107;
DataContext dc = new DataContext();
var items = (from a in dc.TableA
join x in dc.TableX
on a.X equals x.X
where a.A == aValue
select new { a, x });
选项 2:
- 假设我编写了一个 SP 串行执行 2 个单独的选择语句。
为了进一步量化问题,您可以假设对于 A 的每个值,只有几 (0-5) 行将从表 Y 中连接,因此连接中返回的表 A 数据的重复并不重要。
我要求严格从数据库服务器影响的角度来看。因此,忽略任何客户端考虑因素(例如往返网络延迟、L2S 查询构建和数据编组成本等),我的问题是:
哪个选项将花费更少的时间在数据库服务器上进行计算?
哪个选项需要更少的内存来评估结果?
如果有最佳实践,通常首选哪个选项?
对不起,如果这听起来太初级,但任何见解将不胜感激。
谢谢,-K。