从sql数据库缓存结果,还是每次查询?

Oli*_*ver 3 sql-server asp.net

我正在基于SQL查询生成页面.

这是查询:

CREATEPROCEDURE sp_searchUsersByFirstLetter 
    @searchQuery nvarchar(1)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT UserName
    FROM Users Join aspnet_Users asp on Users.UserId = asp.UserId
    WHERE (LoweredUserName like @searchQuery + '%')
Run Code Online (Sandbox Code Playgroud)

我可以为字母表中的每个字母调用此过程,并获取以该字母开头的所有用户.然后,我将这些用户放入我的一个页面上的列表中.

我的问题是:将用户列表缓存到我的网络服务器,而不是每次都查询数据库会更好吗?像这样:

HttpRuntime.Cache.Insert("users", listOfUsersReturnedFromQuery, null, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration);
Run Code Online (Sandbox Code Playgroud)

如果用户列表过时了一小时,它对我来说没问题.每次查询数据库会更有效吗?

Pol*_*ial 6

对于查询满足以下约束的情况,最好使用缓存:

  • 数据不是时间关键的,即通过使代码错过最近的数据更新来确保缓存命中不会破坏您的应用程序.
  • 数据未按顺序排列,即A,B,C,D,E被缓存,F被另一个用户插入,您的用户插入G并命中缓存,从而导致ABCDEG而不是ABCDEFG.
  • 数据变化不大.
  • 查询数据并经常重复使用.

大小并不是一个真正的因素,除非它真的会对你的RAM征税.

我发现要缓存的最好的表之一是设置表,其中数据几乎是静态的,几乎每个页面请求都会被查询,并且不必立即进行更改.

您要做的最好的事情是测试哪些查询执行最多,然后选择那些对数据库服务器征税最高的查询.除此之外,缓存任何你能负担得起的东西.您还应该看一下调整最大缓存对象的年龄.如果您每秒执行100次查询,则可以通过简单地将其缓存1秒来降低该速率99%,这可以消除大多数实际情况下的更新延迟问题.