我注意到我们的 Web 应用程序查询特定表的次数非常多。该表相对较小,仅使用了大约一百行。
我想知道是否有一种方法可以在网站应用程序的内存中每 15 分钟左右将该表存储一次,这样系统就不必进行如此多的查询来一遍又一遍地获取相同的信息。这将适用于许多不同的用户。
该表是 Client 表,因此用户从许多不同的客户端登录。数据是相当静态的,可能每天更新一次。
更新: SQL 探查器显示查询运行了很多,所以这就是我所关心的。该网站不是特别慢。我只是认为这可以帮助它更快。
我注意到我们的 Web 应用程序查询特定表的次数非常多。该表相对较小,仅使用了大约一百行。
我想知道是否有一种方法可以在网站应用程序的内存中每 15 分钟左右将该表存储一次,这样系统就不必进行如此多的查询来一遍又一遍地获取相同的信息。这将适用于许多不同的用户。
该表是 Client 表,因此用户从许多不同的客户端登录。数据是相当静态的,可能每天更新一次。
更新: SQL 探查器显示查询运行了很多,所以这就是我所关心的。该网站不是特别慢。我只是认为这可以帮助它更快。
如果表很小且查询频繁,则数据和任何索引很可能完全在 SQL Server 的内存中,查询计划被缓存,并且查询将非常快。
在进行任何更改之前衡量实际的性能影响。
如果您发现存在性能影响,您可以使用许多缓存策略来减少访问数据库的次数。需要更多关于表访问模式和信息一致性需求的信息来推荐特定的缓存策略。
你说
一遍又一遍地获取相同的信息
但也说明
每 15 分钟一次
如果信息确实一遍又一遍地相同,您可以在应用程序启动时将其加载到 ASP.Net 缓存中。如果它可能会经常更改,但对于给定用户来说数据有点过时是可以的,那么您可以使用基于时间的缓存过期策略。如果数据只是经常更改,但必须在更改后立即更新,则可以考虑使用SQL Dependency缓存过期。
有关 ASP.Net 缓存的更多信息,请参见
http://msdn.microsoft.com/en-us/library/xsbfdd8c(v=vs.100).aspx
特别是
http://msdn.microsoft.com/en-us/library/6hbbsfk6(v=vs.100).aspx
我的建议是创建一个 WCF Windows 服务 - 使用 REST,您可以轻松地缓存 SQLDataReader(或其他 DataReader)并实现一个 TTL 指标以每隔一段时间重新查询。
好吧,解决方案很少。
您可以尝试使用非聚集索引优化您的查询
您可以使用 App Fabric 缓存或类似的东西