我已经选择了要过滤的数据数量。
根据结果,我必须再进行几次查询迭代。
现在我有两个选择:
1)。通过改进每次过滤的查询在DataBase上进行查询
或
2)。在查询时,首先将过滤后的数据放到DataTable中,然后在该DataTable上执行更多过滤操作(不需要在DataBase上查询)。
在哪种情况下性能更好?
附言:我知道以前也有人问过同样的问题。但是没有得到正确的答案。:)
发布于 2012-04-16 13:56:46
如果已经在内存中了更广泛的数据集,那么"2“几乎在所有情况下都会更快;没有网络跳跃,没有带宽,没有服务器端时间。只是一个内存中的过滤器。即使在像ASP.NET这样的无状态环境中,缓存(参数化)这样的查询结果也是很常见的,这样您就可以在页面之间重用结果。
当然,不要把"2“带到荒唐的程度。从整个表开始,或者从大量的行开始,在许多级别上都是不好的:
然而,在许多常见的场景中,您通常只查询第一页的结果和计数,因此您实际上没有该数据集(您不能从1页和一个计数中推断出过滤的子集是什么样子的)。因此"1“成为更好的选择(但也保留了对分页结果的缓存)。
发布于 2012-04-16 13:56:53
正确的答案:你需要决定什么是预期的/期望的性能,然后测量你感兴趣的方法,看看哪一个适合。
请注意,您需要在接近真实数据的数据集上测量prottypes。由于您建议的两种方法是内存使用和IO/网络访问之间的显式折衷,因此如果不在性能上与您的生产系统相当接近的机器上尝试您的真实数据,就不可能预测结果。
https://stackoverflow.com/questions/10169195
复制相似问题