LINQ 是不是存在类似于 FoxPro 的 Rushmore 的任何类型的索引? [复制]

Posted

技术标签:

【中文标题】LINQ 是不是存在类似于 FoxPro 的 Rushmore 的任何类型的索引? [复制]【英文标题】:Does there Exist for LINQ any sort of indexing akin to FoxPro's Rushmore? [duplicate]LINQ 是否存在类似于 FoxPro 的 Rushmore 的任何类型的索引? [复制] 【发布时间】:2019-11-24 15:52:54 【问题描述】:

我使用过 FoxPro 数据库,它使用 Rushmore optimization technology,我想知道是否有任何针对 LINQ 的优化技术。

我不是在 LINQ-to-SQL 中寻找这个,因为 Rushmore 实际上已被同化到 SQL Server 中,并负责其与索引相关的部分速度。

我想知道对于 LINQ-to-Objects,是否有类似 Rushmore 或 SQL Server 中与索引相关的性能优化的东西?


这个问题实际上并不是重复的,因为 1.) Rushmore 自动优化了你的表达式(如果你用 I4O 这样做,它是手动完成的),因为 2)。有一个位图组件允许在表达式中快速组合多个索引(并且具有良好的性能),并且因为 3)。该技术适用于无法放入内存的表(在这种情况下,这是一个加分项)。

【问题讨论】:

这感觉像是一个 XY 问题 - meta.stackexchange.com/questions/66377/what-is-the-xy-problem。您是否有一些很慢的代码要加快速度?你为什么问这个问题? 直接回答你的问题 - 我不知道这样的事情,没有。 你知道数据库索引是如何工作的吗?如果你这样做了,我猜你会意识到为什么这个问题没有真正的意义。如果您将 LINQ to Objects 用于索引将提供显着优势的事情,那么您可能一开始就做错了。 我认为这样的事情必须基于Dictionaries,例如,List<T> 伴随着Dictionary 类型@ 上的每个“索引”属性987654327@。但是,创建和维护Dictionaries 的开销会很大,并且只有在处理非常大的集合或非常复杂的查询时才会显着提高性能。至少在第一种情况下,您可能一开始就不应该使用 L2O。 这个问题正在meta讨论 【参考方案1】:

Linq-to-Objects 中没有查询优化器和索引。您可以使用 ToDictionary、ToLookup、ToHashset 扩展方法在内存中的集合上创建“索引”,并且可以创建对象的排序集合。

然后,您可以使用这些优化的集合手动编写查询和过程代码,以复制查询优化器原本会执行的操作。

【讨论】:

我们如何有效地组合索引优化表达式,因为 Rushmore 似乎做得很好?逐个对象会太慢,并且可能占用太多内存。顺便说一句,很高兴直接从微软那里得到答案! (谢谢!)【参考方案2】:

(我只是在大声思考,评论会一团糟)

Rushmore 优化基本上是关于选择正确的索引,和\或根本不使用索引并即时进行位图索引。虽然这是一种很好的技术,但我认为数据库除了索引本身之外还可以通过它们自己的不同技巧来加速。例如,ansi sql 中的横向,postgreSQL 中的范围索引,分片很少能命名。如果您针对特定后端使用 Linq,您将利用该后端的功能(包括 Rushmore,如果您使用的是 Linq To VFP)。

对于 Linq To Objects,AFAIK 没有这样的东西,但作为开发人员,您可以负责尽可能优化地编写它,如果您认为 L2O 是内存中的东西,您可能不需要它就像您使用数据库一样。即使使用 Rushmore,我们也有责任尝试其他查询方式以获得最佳性能。

(您将问题标记为“Linq”,我希望 Joseph Albahari - 简而言之 .Net xx 的作者 - 会看到它并提供详细的答案)

【讨论】:

我喜欢“LINQ to VFP”的可能性——你知道这样做了吗? @MicroservicesOnDDD,你是什么意思?您是否在问是否存在“Linq To VFP”和\或 Linq To EF for VFP?如果是这样,是的,请查看 Tom Brother 的 GitHub 页面 (github.com/tombrothers)。

以上是关于LINQ 是不是存在类似于 FoxPro 的 Rushmore 的任何类型的索引? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Linq 搜索值是不是存在于对象列表中

现有的类似于 Parallel.For 的 LINQ 扩展方法? [复制]

为啥 Lambda 变量范围存在于 LINQ 查询之外?

利用visual foxpro将dbf文件转为excel文件之后 中文部分都是乱码如何解决呢?

Rx.NET 中是不是存在功能类似于 BehaviorSubject 但仅在值发生更改时才发出的 Subject 实现?

parallel_for (Inter TBB) 上是不是存在类似于我们在 std::function 上看到的开销的开销?