1

我正在使用一种架构,该架构需要将大型(静态)表与非常频繁更改的数据相结合。

为了强调这一点,想象一下 SO 网站用户访问内部加入了他们的用户数据库)。

SELECT * FROM UserProfile INNER JOIN OnlineUser (on UserProfiles.id = OnlineUser.id)

其中 UserProfile 位于一个大型 SQL 表中,而 OnlineUser 是 Web 服务器上的动态数据。

将所有内容都放入内存会占用大量空间,并且将所有内容都放入数据库中确实会给服务器带来负担(想到它就不寒而栗)。有没有更好的方法来做到这一点?

上帝Jon SkeetLINQ 无法处理内存中集合和数据库表之间的连接。他建议使用包含子句或列表,在这种情况下两者都不合适。

编辑:

SQL Server 中的内存表 (PINTABLE) 可以做到这一点。由于该功能已被弃用,是否可以假设 SQL Server 2008 会设法将其保存在内存中以减少 IO?

4

1 回答 1

0

您必须在某处进行实际的连接操作。要么将OnlineUser数据带到 SQL Server 并在那里执行连接,要么将UserProfile数据带入内存并在那里执行连接。

通常最好让数据库服务器整理出所需的数据,然后只将其读入内存。解决该问题的一种方法是在 SQL Server 上创建一个临时表,在其中放置连接操作所需的数据字段(在您的示例中OnlineUser.id)。

然后执行 SQL 查询,将所需的数据放入内存。确保您拥有加快过滤速度的索引。检索到内存后,匹配两个集合(例如,将它们按相同的键排序,然后使用 linqZip运算符)

于 2012-05-28T19:14:44.930 回答