我有一个LINQ查询,可以在多个列上搜索多个关键字。目的是用户可以搜索多个关键字,并在我的Media
实体中的每个属性上搜索关键字。这是一个简化的例子:
var result = repository.GetAll<Media>().Where(x =>
x.Title.Contains("Apples") || x.Description.Contains("Apples") || x.Tags.Contains("Apples") ||
x.Title.Contains("Oranges") || x.Description.Contains("Oranges") || x.Tags.Contains("Oranges") ||
x.Title.Contains("Pears") || x.Description.Contains("Pears") || x.Tags.Contains("Pears")
);
换句话说,我想在Apples
,Oranges
和{{列上搜索关键字Pears
,Title
和Description
1}}。
输出的SQL如下所示:
Tags
在这种情况下,这是最优化的SQL吗?如果没有,我如何重写LINQ查询以创建最佳的SQL语句?我正在使用SQLite进行测试,使用SQL Server进行实际部署。
答案 0 :(得分:2)
真正的性能影响是这种查询难以优化。您希望查找子字符串,默认情况下不可索引。
从纯粹的L2S角度来看,你无能为力。但是,如果您可以启用全文搜索,那么您可以使用更好的工具来加快查询速度。
答案 1 :(得分:0)
说实话,我看不出它会如何快得多。不可否认,“包含”通配符的风格开始时可能相当缓慢(例如与“开始时”相比)。
您是否看过SQL Server执行计划是什么样的?具有真实数据集的实际表现是什么?