我正在 SQL Server 上构建数据库。
这个数据库将非常庞大。但是,很少有表需要非常频繁地查询并且很小。
有没有办法将这些表缓存在 RAM 中以加快查询速度?
任何使数据库插入/查询更快的想法/链接都将受到高度赞赏。
另外,如果我从 SQL Express 迁移到 SQL Server Enterprise,是否会获得任何性能提升?
提前致谢。
我正在 SQL Server 上构建数据库。
这个数据库将非常庞大。但是,很少有表需要非常频繁地查询并且很小。
有没有办法将这些表缓存在 RAM 中以加快查询速度?
任何使数据库插入/查询更快的想法/链接都将受到高度赞赏。
另外,如果我从 SQL Express 迁移到 SQL Server Enterprise,是否会获得任何性能提升?
提前致谢。
SQL Server 将在保持 RAM 中经常访问的小表方面做得非常出色。
然而,一个小的经常访问的表听起来确实是在应用层缓存以避免访问数据库的好候选。
如果您的数据库确实是“巨大的”,您将达到 SQL Express 的 1GB RAM 限制(和/或每个 DB 存储限制 10GB),并且需要一个没有该限制的版本。
http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx
您可以从表中读取数据并存储到 DataTable 变量中。您应该创建合适的索引并让查询更快。
如果您使用的是 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)
查询使用的页面越多,该页面在内存中的可能性就越大。但它将处于页面级别而不是表级别。每次引用它时,它的计数都会增加,而后台进程(惰性写入器)通常会减少所有页面的计数。当需要将新页面带入内存时;sql server 会将计数最少的页面写入磁盘。因此,如果您的表的页面被频繁访问,则计数很可能会很高,因此这些页面将在内存中停留更长时间.但是,如果您将有某种大查询从不同的表中读取大量数据,这些数据说比您的内存还多,那么即使这些页面也可能会被抛出缓存。但是如果您没有那种查询,那么页面保留在内存中的可能性很高。
此外,这意味着同一个页面被访问了很多次。如果差异进程将从同一个表中读取差异页面,那么您所有页面的使用计数可能不会很高,因此其中一些可能会写入磁盘。
阅读下面的博客,了解有关缓冲区等如何工作的更多详细信息。
http://sqlblog.com/blogs/elisabeth_redei/archive/2009/03/01/bufferpool-performance-counters.aspx
根据这些小表的更改频率,查询通知可能是一个不错的选择。本质上,您为应用程序订阅数据库中数据集的更改。一个典型的例子是供应商列表。随着时间的推移变化不大,但您希望应用程序知道它何时发生变化。