0

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

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

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

让我们假设“流派”表是一个包含数千甚至数百万行的表。我认为在 JOIN 发生后过滤数据可能非常低效,这就是该查询在 Simple.Date 中翻译的内容。

过滤Generes表中的数据会更好,这意味着首先创建一个SELECT语句并与该过滤表进行JOIN?

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

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

需要您的答案才能知道是继续使用 Simple.Data,还是将其抑制为支持另一个微 ORM。

4

3 回答 3

5

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

Try running some queries through SQL Management Studio and looking at the Execution Plan to see how they are actually optimised and executed. Or just try the SQL you think would work better and see how it actually performs compared to what is generated by Simple.Data.

于 2012-10-17T21:50:16.697 回答
2

Simple.Data 生成的 sql 是惯用的 T-SQL,老实说,如果我自己起草 sql,我会写什么。

该 sql 允许 Sql Server 优化执行计划,这应该意味着最有效的数据检索。

于 2012-10-17T21:09:30.540 回答
-1

The beauty of Simple.Data is that if you have any doubts or issues with the sql it generates you can just call a stored proc:

db.ProcedureWithParameters(1, 2);
于 2014-11-05T23:44:51.910 回答