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();
}
但它非常慢,因为字段是文本字段(姓名、姓氏、电子邮件…)。使用什么策略可以快速搜索一个文本框?
你可以试试这样的东西吗?
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是否符合你的期望是值得的