我需要将 10,000 到 20,000 个唯一过滤器应用于 50M 行、8 列和适当索引的数据集。
我目前的方法是一次动态地生成和执行这些查询:
var stats = (from a in db.AggregatedStats
where a.StatType.StartsWith("TOTAL_ITEM")
select a);
// Add more filters to the WHERE clause
foreach (var stat in stats) { // Process the data }
我相信这种方法称为从 SQL Server 到 MoveNext() 的“流式传输”数据。
将数据缓冲到程序的内存中会更有效吗?
var stats = (from a in db.AggregatedStats
where a.StatType.StartsWith("TOTAL_ITEM")
select a).ToList();
然后将过滤器应用于此实体列表:
var result = (from a in stats
where a.Region.Equals(region)
select a);
这将有效地将 SQL Server 查询的数量从 10,000 减少到 1。
在这种情况下,与从 10,000 个查询流式传输数据所需的时间相比,将数据集缓冲到程序中是否值得额外的 RAM?
谢谢!