我选择了过滤的数据数量。
根据结果,我必须进行多次查询迭代。
现在我可以选择 2 个选项:
1)。通过每次改进过滤查询来查询数据库
或者
2)。第一次将过滤后的数据带到 DataTable - 当查询时,然后对该 DataTable 执行更多过滤 - (无需在数据库上查询)。
什么情况下性能更高?
PS:我知道以前有人问过同样的问题。但没有得到正确的答案。:)
我选择了过滤的数据数量。
根据结果,我必须进行多次查询迭代。
现在我可以选择 2 个选项:
1)。通过每次改进过滤查询来查询数据库
或者
2)。第一次将过滤后的数据带到 DataTable - 当查询时,然后对该 DataTable 执行更多过滤 - (无需在数据库上查询)。
什么情况下性能更高?
PS:我知道以前有人问过同样的问题。但没有得到正确的答案。:)
如果您在内存中已经有更广泛的数据集,那么“2”几乎普遍会更快;没有网络跃点,没有带宽,没有服务器端时间。只是一个内存过滤器。即使在诸如 ASP.NET 之类的无状态环境中,通常也会缓存这样的查询(参数化)结果,以便您可以在页面之间重用结果。
当然,不要将“2”带到荒谬的水平......从整个表或大量行开始,在许多层面上都是不好的:
但是,在许多常见情况下,您通常只查询结果的第一页和计数,因此您实际上没有那组数据(您无法从 1 页和计数推断出过滤后的子集是多少)好像)。所以“1”成为更好的选择(但也保留分页结果的缓存)。
正确答案:您需要确定预期/期望的性能,而不是衡量您感兴趣的方法并查看哪一种适合。
请注意,您需要在与真实数据非常接近的数据集上测量原型。由于您建议的 2 种方法是内存使用和 IO/网络访问之间的明确权衡,因此如果不尝试在性能上与您的生产系统相当接近的机器上的真实数据,就无法预测结果。