2014-03-27 208 views
0

我有一個Web服務用於在表中搜索一天一次的更改。 我使用這個代碼,以使在SQL表中選擇的方法:SQL表高速緩存

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表上創建select方法?

編輯

也許有點像SQL表保存到本地存儲

+0

出於好奇,你有多少條記錄/運行該查詢需要多長時間? –

+0

我有17000條記錄,但是它的搜索引擎會每秒運行一次 – MTA

+0

它每秒運行一次?它是一個網站,許多用戶正在查詢列表或其他內容? –

回答

0

SQL Server是在搜索的數據相當不錯。如果您搜索的數量或記錄相對較小(在這種情況下實際調用SQL Server的開銷將是放緩因素),則只在本地緩存您的信息纔會更好。

否則,由於您的查詢使用通配符,索引您的列無助於加速查詢。你可以看看Full-Text Search

0

這將數據保存到本地內存,你可以搜索它

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中像'%不使用索引

是否過早優化的情況?
你知道SQL是一個性能瓶頸嗎?

SQL在同一臺服務器上嗎?
SQL還會將最近的數據緩存在內存中。
每秒對17,000條記錄進行搜索應該不成問題。
現有查詢需要多長時間?

時間爲O高速緩存(1)將

Dictionary<string, List<string>> 

其中關鍵是搜索和值是標題的列表。
首先檢查搜索是否已經運行。
一旦字典超過X的大小,然後清除它並開始新鮮。