SQL table caching

本文关键字:caching table SQL | 更新日期: 2023-09-27 17:54:18

我有一个web服务,用于在每天更改一次的表中进行搜索。我使用以下代码在SQL表上创建一个select方法:

using (SqlConnection con = new SqlConnection(SqlConnectionString))
{
    string sql = @"SELECT TOP 60 * FROM movies WHERE title like @Search";
    using (var command = new SqlCommand(sql, con))
    {
        command.Parameters.AddWithValue("Search", "%" + searchQuery + "%");
        con.Open();
        using (var reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                //Read
            }
        }
    }
}

我认为如果我缓存表到一个内存对象,它将有助于减少每次选择的时间。有没有办法使一个选择方法上的缓存对象,而不是在SQL表?

<标题>编辑

比如将SQL表保存到本地内存

SQL table caching

这将把数据保存到本地内存中,您可以搜索它

HashSet<string> Titles = new HashSet<string>() { "Gone With The Wind", "Terminator", "Windtalkeer" };
String search = "Wind";
IEnumerable<string> MatchingTitles = Titles.Where(x => (x.Contains(search)));
foreach (string title in MatchingTitles) System.Diagnostics.Debug.WriteLine(title);

LINQ搜索将是O(n)
它不会使用任何索引

但是即使在SQL中like '%也不使用索引

是否存在过早优化?
您知道SQL是性能瓶颈吗?

SQL是否在同一服务器上?
SQL也会在内存中缓存最近的数据。
每秒搜索17,000条记录应该不是问题。
现有查询需要多长时间?

0(1)的缓存将是

Dictionary<string, List<string>>

其中键是搜索,值是标题列表。
首先检查搜索是否已经运行。
一旦字典的大小超过X,就把它清除掉,重新开始。

SQL Server非常擅长搜索数据。只有当你搜索的数量或记录相对较少时,本地缓存你的信息才会表现得更好(在这种情况下,实际调用SQL Server的开销将是减速因素)。

否则,因为您的查询使用通配符,索引您的列将无助于加速查询。你可以看看全文搜索