Simple.Data сгенерированные по умолчанию запросы и производительность

Я подумываю об использовании Simple.Data Micro-ORM для моего веб-сайта ASP.NET 4.5. Тем не менее, есть кое-что, что мне нужно знать, прежде чем решить, использовать это или нет.

Давайте возьмем следующий запрос на соединение, например:

var albums = db.Albums.FindAllByGenreId(1)
  .Select(
db.Albums.Title,
db.Albums.Genre.Name);

Этот запрос будет переведен на:

select 
 [dbo].[Albums].[Title],
 [dbo].[Genres].[Name] 
from [dbo].[Albums] 
   LEFT JOIN [dbo].[Genres] ON ([dbo].[Genres].[GenreId] = [dbo].[Albums].[GenreId]) 
WHERE [dbo].[Albums].[GenreId] = @p1
@p1 (Int32) = 1

Давайте предположим, что таблица "Жанры" - это таблица с тысячами или даже миллионами строк. Я думаю, что может быть очень неэффективно фильтровать данные после того, как произошло СОЕДИНЕНИЕ, для чего этот запрос переведен в Simple.Date.

Было бы лучше отфильтровать данные в таблице Generes, что означает сначала создать команду make SELECT и выполнить JOIN с этой отфильтрованной таблицей?

Не лучше ли отфильтровать данные заранее?

Кроме того, есть возможность сделать этот тип сложного (JOIN на отфильтрованной таблице) запроса с использованием Simple.Data.

Нужен ваш ответ, чтобы узнать, следует ли продолжать с Simple.Data, или смягчить его в пользу другого микро-ORM.

3 ответа

Решение

Вы не понимаете, как SQL интерпретируется и выполняется ядром базы данных. Современные базы данных невероятно умны в отношении лучшего способа выполнения запросов, и порядок, в котором инструкции появляются в инструкциях SQL, не имеет ничего общего с порядком их выполнения.

Попробуйте выполнить некоторые запросы через SQL Management Studio и посмотреть на План выполнения, чтобы увидеть, как они на самом деле оптимизируются и выполняются. Или просто попробуйте SQL, который, по вашему мнению, будет работать лучше, и посмотрите, как он на самом деле работает по сравнению с тем, что генерируется Simple.Data.

SQL, который генерирует Simple.Data, - это идиоматический T-SQL, и, честно говоря, это то, что я написал бы, если бы писал сам SQL.

Этот sql позволяет Sql Server оптимизировать план выполнения, что должно означать наиболее эффективный поиск данных.

Прелесть Simple.Data в том, что если у вас есть какие-либо сомнения или проблемы с SQL, который он генерирует, вы можете просто вызвать хранимый процесс:

db.ProcedureWithParameters(1, 2);
Другие вопросы по тегам