我有一些需要执行的数据分析。平均而言,它将涉及 50K-150K 行之间的某处。从这些行中,我需要根据五个不同的标准提取 Sum(X) 和 Count(X) 的总和。有两种方法:
- 编写 10 个不同的查询,每个查询都旨在使用 Sum() 或 Count() 聚合列 X 中的数据。运行每一个并使用 SqlCommand.ExecuteScalar() 检索结果。
- 创建一个自定义对象以包含评估不同条件所需的所有不同参数。使用 SqlCommand.ExecuteDataReader() 运行一个查询,该查询将返回构成包含所有不同条件子集的超集所需的所有数据。将 DataReader 中的每一行读入一个新对象,并将每一行添加到一个 List 集合中。检索所有数据,使用 Linq-to-Object 根据不同条件确定所需的不同 Sum() 和 Count() 值。
我知道我可以尝试每一个,看看哪个最快,但我对社区关于哪个可能更快的建议感兴趣。假设 Sql Server 和 Web Server 各自运行在自己的机器上,每个都有足够的内存。
现在我倾向于选项 1。尽管对 DB 有更多查询,但 DB 本身将完成所有聚合工作,并且很少有数据会在 Sql Server 和 Web Server 之间传递。使用选项 2,只有一个查询,但它会将大量数据传递给 .Net,然后 .Net 将不得不完成与聚合函数有关的所有繁重工作(尽管我没有有任何依据,我怀疑 Sql Server 在运行这些类型的大聚合函数时效率更高)。
关于走哪条路(或我错过的第三种选择)的任何想法?