C# NET-如何在一个文本框中有效地搜索数据库中的多个字段?

C# NET-如何在一个文本框中有效地搜索数据库中的多个字段?,c#,asp.net,linq,C#,Asp.net,Linq,我使用search linq to sql通过一个文本框在DB表的多个字段中进行搜索的示例: var TheOutput = (from t in TheDC.SomeTable where TheIDs.Contains(t.ID) && ( t.column1.Contains(TheSearchTerm) || t.column2.Contains(TheSearchTe

我使用search linq to sql通过一个文本框在DB表的多个字段中进行搜索的示例:

var TheOutput = (from t in TheDC.SomeTable

                 where TheIDs.Contains(t.ID) && (
                 t.column1.Contains(TheSearchTerm) ||
                 t.column2.Contains(TheSearchTerm) ||
                 t.column3.Contains(TheSearchTerm) )           
                 select t.ID).ToList();
}

但是它非常慢,因为字段是文本字段(姓名、姓氏、电子邮件…)。使用什么策略可以快速搜索一个文本框?

您可以尝试类似的方法

var TheOutput = TheIDs.Select(id => TheDC.SomeTable.Find(id)).Where(t => 
    t.column1.Contains(TheSearchTerm) || 
    t.column2.Contains(TheSearchTerm) || 
    t.column3.Contains(TheSearchTerm)
)

假设是字符串所包含的内容导致了速度减慢,那么值得尝试全文索引

您需要运行以下操作:

CREATE UNIQUE INDEX unique_index_on_id ON TheDc.SomeTable(ID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON TheDc.SomeTable(column1, column2, column3) 
   KEY INDEX unique_index_on_id 
   WITH STOPLIST = SYSTEM;
有关更多信息,请参阅


也就是说,始终值得使用SQL profiler(或者如果您使用的是EF the awesome)来确认生成的SQL是否符合您的期望

我将为ID列编制索引;除此之外,我认为你也无能为力;查询很简单,再简单不过了。如果性能确实是一个问题,因为您的表很大,那么您可以在Azure上设置SQL Server联合,但这相当复杂。从索引ID列开始,看看这有什么帮助。@frenchie这里似乎不是ID的问题,因为它在另一个表中。您必须为文本字段(名称、姓氏…)编制索引。将customers表克隆到其他表或类似的表中,并在克隆表中为字符串字段编制索引,然后在克隆表中搜索如何?@MattKo:看起来第一个WHERE子句位于t.ID上,所以我认为索引将有所帮助。“查找ID==whatever的所有行”,然后字符串条件只应用于第一个子句的结果。另外,Amel,按照查询的方式,每个查询最多只能传递2000个ID,这就是SQL Server的设置方式。如果你传入更多的ID,你会得到一个异常。@frenchie是的,在我看来,这个
TheIDs
东西并没有包含很多记录。因此,我认为最慢的部分是他在任何文本字段上寻找匹配项。但是
theid
上的索引肯定没有错:)