【发布时间】:2019-10-09 07:33:13
【问题描述】:
我正在使用 LiteDB 存储大约 100 万条记录。当我在过滤后从 LiteDb 检索记录并从 IQueryable 转换 .ToList() 时,即使查询结果只是一条记录,它也非常慢。我真的坚持这一点。
我发现转换 .ToList() 的问题。
我正在阅读一些关于已经面临的类似问题(即 .ToList())的内容。但没有得到任何正确的解决方案。
我的示例代码:
IQueryable<student> activeFilterResult = liteDatabase
.GetCollection<student>(studentcollection)
.Find(Query.All())
.AsQueryable<student>();
.......
activeFilterResult
.OrderBy(studentrecord => studentrecord.Id)
.Select(studentrecord => studentrecord.Id)
.Distinct()
.ToList();
【问题讨论】:
-
如果它们都相同,您在丢弃它们之前仍然订购了 1M 条记录。 ToList 创建一个副本,但只创建它得到的内容。
-
如果你删除
Distinct会怎样? -
在调用
ToList之前,您所做的基本上就是构造一个查询。尚未实际检索或排序或检查重复数据。您刚刚计划了一个在未来某个时间点执行的工作流。通过致电ToList,所有这些计划中的事情现在实际上都需要发生。速度慢不是ToList的“错”,而是因为你计划了很多事情要做。 -
@Arthur - 通常数据库在订购或查找重复项等方面“更好”。我从来没有使用过 LiteDB,所以最好简单地获取所有内容,然后在内存中处理它。