Simple.Data默认生成的查询和性能

Ida*_*ter 0 sql asp.net simple.data micro-orm

我正在考虑在我的ASP.NET 4.5网站上使用Simple.Data Micro-ORM.但是,在决定是否使用它之前,我需要知道一些事情.

我们以下面的Join查询为例:

var albums = db.Albums.FindAllByGenreId(1)
  .Select(
db.Albums.Title,
db.Albums.Genre.Name);
Run Code Online (Sandbox Code Playgroud)

此查询将被翻译为:

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
Run Code Online (Sandbox Code Playgroud)

我们假设'Genres'表是一个包含数千甚至数百万行的表.我认为在JOIN发生之后过滤数据可能效率非常低,这是Simple.SDate中此查询的转换.

是否更好地过滤Generes表中的数据第一,这意味着先创建一个SELECT语句并使用该过滤表进行JOIN?

提前过滤数据不是更好吗?

此外,是否可以选择使用Simple.Data进行该类型的复杂(在过滤表上的JOIN)查询.

需要你的答案知道是否继续使用Simple.Data,或者使用其他微型ORM来阻止它.

Mar*_*dle 5

您对数据库引擎如何解释和执行SQL感到困惑.现代数据库对于执行查询的最佳方式非常聪明,并且指令在SQL语句中出现的顺序与它们的执行顺序无关.

尝试通过SQL Management Studio运行一些查询并查看执行计划,以了解它们是如何实际优化和执行的.或者只是尝试你认为可以更好地工作的SQL,并看看它与Simple.Data生成的内容相比实际上是如何执行的.