如何在筛选数据时获得更好的性能查询结果



我有查询需要按某些搜索条件过滤大量数据。

搜索通过 3 个表进行:产品、产品主要代码、产品代码。

大型数据(假设大约有 2000 条记录,所以不是那么大,但由其他表数据最大(集位于 ProductCodes 表中。

这是我所做的事情的一个例子。

var result = products.Where(x => x.Code.Contains(se) || 
x.ProductPrimaryCodes.Any(p => p.Code.Contains(se)) || 
x.ProductCodes.Any(p => p.Code.Contains(se)))
.Select(x => new ProductDto
{
Id = x.Id,
Name = x.Name,
InStock = x.InStock,
BrandId = (BrandType)x.BrandId,
Code = x.Code,
CategoryName = x.Category.Name,
SubCategoryName = x.SubCategory.Name,
});

查询执行的时间约为 8-9 秒,因此我相信这种搜索相当长。请注意,无需执行ProductCodes.Any(),查询将在不到一秒的时间内执行并将结果检索到页面。

产品代码表:

Id,
Code,
ProductId

任何建议如何获得更好的查询性能?

这是对我有用的解决方案。

var filteredProductsByCode = products.Where(x => x.Code.Contains(se));
var filteredProducts = products.Where(x => x.ProductCodes.Any(p => p.Code.Contains(se)) 
|| x.ProductPrimaryCodes.Any(p => p.Code.Contains(se)));
return filteredProductsByCode.Union(filteredProducts).Select(x => new ProductDto
{
Id = x.Id,
Name = x.Name,
InStock = x.InStock,
BrandId = (BrandType)x.BrandId,
Code = x.Code,
CategoryName = x.Category.Name,
SubCategoryName = x.SubCategory.Name,
}).OrderByDescending(x => x.Id)

显然不是最干净的,但我也会考虑为此类查询引入存储过程。

相关内容

  • 没有找到相关文章

最新更新