首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么搜索100万条相关记录的查询即使在应用索引之后也要花费相当长的时间?

为什么搜索100万条相关记录的查询即使在应用索引之后也要花费相当长的时间?
EN

Stack Overflow用户
提问于 2022-09-02 07:19:25
回答 1查看 53关注 0票数 0
代码语言:javascript
复制
var recordsStates = from s in db.Record
                    join ss in db.Record_State
                         on s.Id equals ss.RecordId
                    join apct in db.RecordTypesContentMapping
                         on new { t1 = ss.RecordId } equals new { t1 = apct.ContentId } into ss_apct
                    from apct in ss_apct.DefaultIfEmpty()
                    where (apct.ContentSourceName == null || apct.ContentSourceName == nameof(Record))
                           && ss.isCurrent && ss.StateId == (int)RecordStateType.Publish
                           && !ss.isDeleated && !s.isDeleted
                           && (searchRecords.CategoryIds.Count == 0 || searchRecords.CategoryIds.Contains((int)s.CategoryId))
                           && (string.IsNullOrEmpty(searchRecords.RecordTitle) || (string.IsNullOrEmpty(s.RecordNameModified) ?
                                                                                                s.RecordName.Contains(searchRecords.RecordTitle) :
                                                                                                s.RecordNameModified.Contains(searchRecords.RecordTitle)))

每张表格都有大约100万份记录。

如果我发送空的RecordTitle,大约需要7-8秒,如果不是空的,则需要4-5秒。

我试着将NC索引应用于主题标题和诸如此类。它是nvarchar(1000)型的。

每个表都是通过外键关联的。我现在不知道是什么让它变慢了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-02 07:36:51

问题可能是笛卡尔爆炸

您可以改进linq到sql的查询性能(正如您应该做的那样),也可以使用拆分查询*。

  • 注意:拆分查询可能会导致脏数据问题,认为您已经完成了第一个sql查询,但在第二个sql查询开始之前,可能会发生另一个请求的数据更改,因此第二个查询将继续使用旧数据。

拆分查询使用msdn

笛卡尔爆炸

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

https://stackoverflow.com/questions/73579092

复制
相关文章

相似问题

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