Существует ли для LINQ какой-либо вид индексации, похожий на FoxPro Rushmore?

Я работал с базами данных FoxPro, в которых используется технология оптимизации Rushmore, и я хотел узнать, есть ли какая-либо технология оптимизации для LINQ.

Я не ищу это в LINQ-to-SQL, потому что Rushmore фактически ассимилировался в SQL Server и отвечает за часть скорости, связанной с индексами.

Я хочу знать для LINQ-to-Objects, есть ли что-то похожее на Rushmore или оптимизацию производительности, связанную с индексами в SQL Server?


Этот вопрос на самом деле не является дубликатом, потому что 1.) Rushmore автоматически оптимизировал ваши выражения (и если вы делаете это с I4O, это делается вручную), потому что 2). был растровый компонент, который позволял быстро комбинировать несколько индексов в выражениях (и имел хорошую производительность), и потому 3). технология работает для таблиц, которые не помещаются в памяти (в данном случае это было бы плюсом).

-10
источник поделиться
2 ответа

В Linq-to-Objects нет оптимизатора запросов и индексов. Вы можете использовать методы расширения ToDictionary, ToLookup, ToHashset, чтобы создавать "индексы" для коллекций в памяти, и вы можете создавать отсортированные коллекции объектов.

Затем вы можете вручную написать запросы и процедурный код, используя эти оптимизированные коллекции, чтобы воспроизвести то, что в противном случае сделал бы оптимизатор запросов.

+2
источник

(Я просто размышляю вслух, и в качестве комментария это будет беспорядок)

Оптимизация Rushmore в основном заключалась в выборе правильных индексов и\или отсутствии индекса вообще, а также индексации битовых карт на лету. Несмотря на то, что это хорошая техника, я думаю, что базы данных достигли скорости благодаря своим собственным трюкам, помимо самих индексов. Например, латеральный в ansi sql, индекс диапазона в postgreSQL, шарды - это мало, чтобы назвать. Если вы используете Linq против определенного бэкэнда, вы будете использовать его бэкэнд-возможности (включая Rushmore, если вы используете Linq To VFP).

Для Linq To Objects нет такого понятия, как AFAIK, но, как разработчик, вы можете взять на себя ответственность за его написание настолько оптимизированным, насколько это возможно, и если вы думаете, что L2O находится в памяти, вам это может понадобиться не так сильно, как вы делаете с базой данных. Даже с Rushmore мы взяли на себя ответственность попробовать альтернативные способы запроса на лучшую производительность.

(У вас есть вопрос, помеченный как "Linq", я надеюсь, что Джозеф Албахари -author из .Net xx в nutshell- увидит его и подробно ответит)

-2
источник

Посмотрите другие вопросы по меткам или Задайте вопрос