我目前正在使用 SqlDataReader 和存储过程在 C# 中手写 DAL。性能很重要,但它仍然应该是可维护的......
假设有一张桌子食谱
(recipeID, author, timeNeeded, yummyFactor, ...)
和一桌食材
(recipeID, name, amount, yummyContributionFactor, ...)
现在我想查询 200 种食谱及其成分。我看到以下可能性:
- 查询所有食谱,然后查询每个食谱的成分。
这当然会导致 maaany 查询。 - 在一个大的加入列表中查询所有食谱及其成分。这会造成大量无用流量,因为每个配方数据都会被多次传输。
- 查询所有食谱,然后通过将 recipeID 列表传回数据库来一次查询所有成分。或者同时发出两个查询并返回多个结果集。回到 DAL,通过他们的 recipeID 将成分与食谱相关联。
- 异国情调的方式:光标通过所有食谱并为每个食谱返回两个单独的食谱和成分结果集。结果集有限制吗?
要获得更多种类,可以通过 DAL 中的 ID 列表或某些参数化 SQL 条件来选择配方。
你认为哪一个的性能/混乱比最好?