簡體   English   中英

使用多個包含語句優化實體框架查詢

[英]Optimize Entity Framework query with multiple contain statements

我正在嘗試優化查詢,該查詢大約需要6秒鍾才能執行。

string[] filters = ...;   

var data =
   (from n in ctx.People
        .Where(np => np.IsActive)
    let isFilterMatch = filters.All(f => n.FirstName.ToLower().Contains(f) ||
                                         n.Prefix.ToLower().Contains(f) ||
                                         n.MiddleName.ToLower().Contains(f) ||
                                         n.LastName.ToLower().Contains(f) ||
                                         n.Information.Email.ToLower().Contains(f) ||
                                         (n.Address!= null &&
                                          (SqlFunctions.StringConvert((double)n.Address.Number).
                                               Contains(f) ||
                                           n.Address.Street.ToLower().Contains(f) ||
                                           n.Address.ZipCode.ToLower().Contains(f) ||
                                           n.Address.City.ToLower().Contains(f))))
    where isFilterMatch
    orderby n.LastName
    select n
    ).Take(numberOfItems).ToList();

這是對搜索對話框的查詢。 用戶可以輸入任何文本,然后它將搜索與輸入匹配的人。 我們將用戶輸入拆分為字符串數組,然后在“人”字段上執行“包含”。 由於存在過濾器數組,因此無法預編譯查詢。

如何優化此功能? 我聽說過Sql Server上的FullTextSearch或存儲過程。 能幫上忙嗎?

我們正在使用Sql Server 2008,Entity Framework 4.0(模型優先)和C#。

我不會為此搜索查詢使用SQL查詢/ Linq查詢。 普通的文本搜索查詢速度可能很慢,並且只能返回准確的結果。 他們不糾正拼寫/語法錯誤等。

您可能會考慮使用SQL Server的“全文搜索”功能; 但是最終的性能可能仍然很差。 請參考http://www.sql-server-performance.com/2010/full-text-search-2008/

我建議使用像Apache Lucene這樣的搜索索引器(在Lucene.NET中以dll形式提供)。 另一個選擇是,您編寫自己的Windows服務以對所有記錄建立索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM