在RAM中缓存数据库的一些表

时间:2012-07-19 02:58:23

标签: c# sql-server database linq-to-sql

我正在SQL Server上构建数据库。

这个数据库将会非常庞大​​。 但是,很少有桌子需要经常查询并且非常小 有没有办法将这些表缓存在RAM中以便更快地进行查询?

任何使数据库插入/查询更快的想法/链接都将受到高度赞赏 另外,如果我从SQL Express迁移到SQL Server Enterprise,是否会提升性能?

提前致谢。

5 个答案:

答案 0 :(得分:2)

SQL Server将在保留RAM中经常访问的小表方面做得非常出色。

但是,一个经常访问的小表听起来像是在应用程序层缓存的好选择,以避免碰到数据库。

如果您的数据库确实“巨大”,您将达到SQL Express的1GB RAM限制(和/或每个数据库存储限制10GB),并且需要一个没有该限制的版本。

http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx

答案 1 :(得分:0)

您可以从表中读取数据并存储到DataTable变量中。 您应该创建合适的索引,并使查询更快。

答案 2 :(得分:0)

如果您正在使用C#,那么您可能尝试过数据缓存。
您只需按照以下3个步骤操作:

  • 将结果提取到列表
  • 现在缓存数据列表
  • 每当您需要查询缓存结果时,请将缓存对象转换为关注列表类型。

以下是示例代码:

List<type> result = (Linq-query).ToList();
Cache["resultSet"] = optresult;
List<type> cachedList = (List<type>)Cache["resultSet"];

现在,您可以对实际使用缓存对象的cachedList执行Linq查询。

注意:对于缓存任何对象,您可以使用更精确的方法,如下所示,这可以更好地控制缓存。

Cache cacheObjectName = new Cache();
cacheObjectName.Insert("Key", value, Dependency, DateTime, TimeSpan, CacheItemPriority, CacheItemRemovedCallback)

答案 3 :(得分:0)

查询使用的页面越多,页面将在内存中的可能性就越多。但它将是页面级别而不是表级别。每次引用时,它的计数都会增加,后台进程(懒惰的编写器)通常会减少所有页面的计数。当一个新的页面需要带入内存时; sql server会将最少计数的页面写入磁盘。因此,如果频繁访问表的页面,则计数很高的可能性很高,因此这些页面会在内存中保留更长时间但是如果你有一些大的查询从不同的表中读取大量的数据,这些数据比你的内存更多,那么即使那些页面也可能被抛出缓存。但是如果你没有这样的查询那么页面将留在记忆中的可能性很高。

此外,它意味着同一页面被访问了很多次。如果diff进程将从同一个表中读取差异页面,那么你的所有页面的使用次数可能不会很高,因此其中一些可能被写入磁盘。

请阅读以下博客,了解缓冲区等的工作原理。

http://sqlblog.com/blogs/elisabeth_redei/archive/2009/03/01/bufferpool-performance-counters.aspx

答案 4 :(得分:0)

根据这些小表的更改频率,Query Notifications可能是一个不错的选择。实质上,您将应用程序订阅到数据库中数据集的更改。一个典型的例子是供应商列表。随着时间的推移不会发生太大变化,但您希望应用程序知道它何时发生变化。