В прошлом при работе с базами данных я обнаружил, что необходимо выполнить низкоуровневые настройки для запроса, например, дать подсказки оптимизатору, что он должен использовать определенный индекс или присоединиться заказ. В настоящее время мы рассматриваем возможность перезаписи уровня данных с помощью Entity Framework; это то, что использование EF предотвращает подобную оптимизацию на низком уровне?Низкоуровневая оптимизация SQL с Entity Framework
В ответ на вопрос this question было предложено, чтобы переработка запроса LINQ была наилучшим способом обеспечения эффективности запроса к базовой базе данных, но, безусловно, это противоречит заявленной цели платформы Entity Framework, согласно которой она должна отделять физические -слойные проблемы из кода, которые должны иметь дело только с концептуальным слоем.
Один из вариантов - использовать представление. Другой вариант, по-видимому, заключается в настройке определяющего запроса для типа сущности. Тем не менее, оба этих подхода работают с одним сущностью, и оптимизационные твики часто необходимо применять только для некоторых видов использования таблицы, а не для каждого использования таблицы. Меня волнует, что я собираюсь в конечном итоге ввести псевдоучреждения в концептуальный слой, чтобы воспользоваться этим, опять же отвлекаясь от разделения концептуальных и физических слоев.
Для записи, мы используем MySQL, а не SQL Server. Я не могу прокомментировать его оптимизатор, но в случае с MySQL существует множество мест, где он выбирает субоптимальный план выполнения. Стандартный аргумент о микро-оптимизации в коде заключается в том, что оптимизаторы компилятора стали настолько умными, что вы не можете их победить. Аналогичный случай с оптимизаторами SQL, похоже, очень далек от моего опыта. –