C# LINQ是否存在类似于FoxPro'的索引;拉什莫尔是谁?

C# LINQ是否存在类似于FoxPro'的索引;拉什莫尔是谁?,c#,vb.net,linq,indexing,visual-foxpro,C#,Vb.net,Linq,Indexing,Visual Foxpro,我曾与FoxPro数据库合作,该数据库使用了,我想知道是否有针对LINQ的优化技术 我不是在LINQtoSQL中寻找这一点,因为Rushmore实际上被吸收到SQLServer中,并负责其索引相关速度的一部分 我想知道对于LinqTo对象,是否有类似于Rushmore或SQL Server中与索引相关的性能优化的内容 这个问题实际上不是重复的,因为1.)Rushmore自动优化了您的表达式(如果您使用I4O进行优化,那么它是手动完成的),因为2)。有一个位图组件,它允许在表达式中快速组合多个索

我曾与FoxPro数据库合作,该数据库使用了,我想知道是否有针对LINQ的优化技术

我不是在LINQtoSQL中寻找这一点,因为Rushmore实际上被吸收到SQLServer中,并负责其索引相关速度的一部分

我想知道对于LinqTo对象,是否有类似于Rushmore或SQL Server中与索引相关的性能优化的内容



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

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

然后,您可以使用这些优化的集合手动编写查询和过程代码,以复制查询优化器在其他情况下所做的工作。

(我只是想大声说出来,这将是一个混乱的注释)

Rushmore优化基本上是选择正确的索引,或者根本不使用索引,而是动态地进行位图索引。虽然这是一种很好的技术,但我认为除了索引本身之外,数据库还可以通过自己的不同技巧来提高速度。例如,ANSISQL中的横向索引、postgreSQL中的范围索引、碎片很少。如果您对特定后端使用Linq,您将利用该后端的功能(包括Rushmore,如果您使用Linq To VFP)

对于LinqTo对象,目前还没有这样的东西,但作为一名开发人员,您可以负责编写尽可能优化的LinqTo对象。如果您认为L2O是内存中的东西,那么您可能不需要像使用数据库那样需要它。即使有了Rushmore,我们也有责任尝试其他查询最佳性能的方法


(您的问题被标记为“Linq”,我希望.Net xx的作者Joseph Albahari能够看到它并提供详细的答案)

这感觉像是一个XY问题-。你是否有一些代码是缓慢的,你试图加快?你为什么要问这个问题?直接回答你的问题-我不知道这样的事情,不。你知道数据库索引是如何工作的吗?如果你这样做了,我猜你会意识到为什么这个问题没有真正意义。如果您使用LINQ to对象来处理索引将提供显著优势的事情,那么您可能一开始就做得不对。我认为这样的事情必须基于
词典
,例如,在
列表
中,每个对象都有
词典
“索引类型
T
上的属性。但是,创建和维护
词典的开销非常大,只有在处理非常大的集合或非常复杂的查询时,才会显著提高性能。至少在第一种情况下,你可能一开始就不应该使用L2O。这个问题正在讨论如何有效地组合索引优化表达式,就像Rushmore所做的那样?逐个对象的速度太慢,可能占用太多内存。顺便说一句,很高兴直接从微软得到答案!(谢谢!)我喜欢“LINQ到VFP”的可能性——你知道这是怎么做的吗?@microservicesondd,你是什么意思?您是否询问是否存在“Linq到VFP”和\或针对VFP的Linq到EF?如果是,请查看Tom Brother的GitHub页面()。