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

本文关键字:一个 文本 字段 有效地 数据库 NET- 搜索 | 更新日期: 2023-09-27 18:29:42

从linq到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();
}

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

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

你可以试试这样的东西吗?

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;

有关更多信息,请参阅MSDN文档

也就是说,使用SQL探查器(或者如果你使用的是Hibernating Rhinos的EF探查器)来确认生成的SQL是否符合你的期望是值得的