首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在过滤数据时获得更好的性能查询结果

如何在过滤数据时获得更好的性能查询结果
EN

Stack Overflow用户
提问于 2018-08-21 05:25:01
回答 1查看 86关注 0票数 1

我有一个查询,需要根据一些搜索条件过滤大量数据。

搜索通过3个表进行: Products、ProductPrimaryCodes、ProductCodes。

大数据(假设有大约2000条记录,所以不是很大,但其他表的数据是最大的)集合在ProductCodes表中。

下面是我所做的一个例子。

代码语言:javascript
复制
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()的情况下,查询在不到一秒的时间内执行并将结果返回到页面。

ProductCodes表:

代码语言:javascript
复制
Id,
Code,
ProductId

如何获得更好的查询性能有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2018-08-21 06:51:29

这就是对我有效的解决方案。

代码语言:javascript
复制
        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)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51938695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档