【发布时间】:2016-06-22 10:13:53
【问题描述】:
我需要对超过 1000 万行文档名称进行排序和过滤(因此我无法修改字符串)。我目前有大约 2 mils 的行,它在 order by 或 where 子句后的 10-15 秒内返回结果。 我更喜欢 EF 解决方案,而不是数据库解决方案,但我愿意接受任何解决方案。 这是一些代码,虽然我不认为它有用:
var orderedQuery = dbItems.OrderBy(a => a.DocumentName);
dbItems = dbItems.Where(a=>
a.DocumentName.ToLower().Contains(filter.DocumentName.ToLower()));
【问题讨论】:
-
我对实体框架一无所知,但您是否像上面显示的那样首先按 DocumentName 对数据进行排序,然后过滤到与您的条件相匹配的 DocumentNames?如果是这样,您正在倒退:将数据过滤到较小的集合,然后对较小的集合进行排序。
-
我可以在不过滤的情况下订购。第一次加载没有过滤器。我正在使用它进行无限滚动。
-
所以你的第一次加载返回所有 1000 万行,按 DocumentName 排序?这似乎不可取 - 没有人会滚动浏览它,所以他们只会看到名称为“Aardvark 1”的文档。为什么不保留数据,直到您知道他们在寻找什么?
-
好吧,我不是写业务逻辑的人。我只需要这样做。我知道这很愚蠢,但我问的是怎么做,而不是是否应该做。
-
您会惊讶于有人想要滚动浏览 1000 万份文档是多么无聊:))
标签: sql oracle entity-framework linq