【问题标题】:Load entire list beforehand and search or send a search request to the database everytime?预先加载整个列表并搜索或每次向数据库发送搜索请求?
【发布时间】:2019-11-11 12:41:45
【问题描述】:

我有大约 100,000 张借记卡的列表,我想在更新与卡相关的交易列表时找到相关卡。我想知道是先加载整个卡片列表并从加载的列表中查找卡片还是每次使用 Entity Framework 执行数据库查询更有效?

//Scenario 1:
var cards = db.Cards.ToList();
foreach (var transaction in newTransactions)
{
   var card = cards.FirstOrDefault(x => x.CardNumber == 
   transaction.TransactionMean);
}

//Scenario 2:
foreach (var transaction in newTransactions)
{
   var card = db.Cards.FirstOrDefault(x => x.CardNumber == 
   transaction.TransactionMean);
}

【问题讨论】:

  • 我确信这可以以更智能的方式完成,例如无需循环即可获取您需要的所有数据的查询。您可以添加更多代码,例如您如何处理card 或交易?
  • 数据库经过优化,可以使用统计信息和索引进行快速搜索。如果 C#、Java 或其他高级编程语言在内存上工作,它们可能会更快,但您需要考虑将数据加载到内存中的时间、数据库服务器之间的延迟、循环/搜索方法等。所以在大大多数情况下,将搜索任务委托给数据库并仅获取结果会更快。

标签: c# sql-server asp.net-mvc entity-framework


【解决方案1】:

通常,如果您的表被正确索引,那么使用数据库查询总是更快,因为数据库用于对大型数据集进行快速查询。

数据库还支持缓存,否则您必须自己实现以加速相似或相同的查询。

最后,如果您只需要一小部分数据,那么传输大量数据绝不是一个好主意,想象一下连接速度很慢并且每次都必须等待 10 秒才能接收到整个数据集,而不是等待2s 用于发送和接收相关数据集的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多