LINQ 是否存在任何类似于 FoxPro 的 Rushmore 的索引?

Does there Exist for LINQ any sort of indexing akin to FoxPro's Rushmore?

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

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

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


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

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

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

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

Rushmore 优化基本上是关于选择正确的索引,and\or 根本不使用索引,而是动态地进行位图索引。虽然这是一项很好的技术,但我认为除了索引本身之外,数据库还必须通过它们自己的不同技巧来提高速度。例如,ansi sql 中的横向索引、postgreSQL 中的范围索引、分片等等。如果您针对特定后端使用 Linq,您将利用该后端的功能(如果您使用 Linq To VFP,则包括 Rushmore)。

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

(您将问题标记为 "Linq",我希望 Joseph Albahari - .Net xx in a nutshell 的作者 - 能够看到它并提供详细的答案)