如何避免过多的数据库之旅

时间:2012-08-27 23:31:52

标签: c# asp.net sql-server performance

我有这些课程

class Match
{
  int MatchID,
  int TeamID, //used to reference Team
  ... other fields
}

注意:匹配实际上有2个团队,这意味着2个TeamID

class Team
{
   int TeamID,
   string TeamName
}

在我看来,我需要显示显示TeamName的List<Match>。所以我添加了另一个字段

class Match
{
  int MatchID,
  int TeamID, //used to reference Team
  ... other fields

  string TeamName;
}

我现在可以做

Match m = getMatch(id);
m.TeamName = getTeamName(m.TeamId); //get name from database

但对于List<Match>getTeamName(TeamId)将转到数据库以获取每个TeamID的TeamName。

对于每页10个匹配的页面,可以是(10x2Teams)=20数据库之旅。

为了避免这种情况,我想到了加载一次,将其存储在内存中并且只在内存中查找TeamName。这使我重新考虑如果记录是5000或更多,那该怎么办。

有更好的方法吗?感谢。

2 个答案:

答案 0 :(得分:0)

执行每页缓存 - 将当前10个匹配列表中存在的ID列表放在一起,然后加载所有具有其中一个ID的团队。

您没有说明如何访问您的数据,但如果您使用的是SQL,那么IN就是您的朋友。

select * from teams were id in ('1', '2', '3', '4')

或者,您可以首先使用您的匹配加载团队,使用join语句,然后在填充匹配数据的同时填充团队数据。

答案 1 :(得分:0)

我同意目前给出的答案。我只想扩展马特的答案。如果您需要对象中的所有数据,那么在一次访问数据库中发出多个sql语句会更有效。这将在单个数据库命中返回多个表。