【问题标题】:Simple.Data Default Generated Queries and PerformanceSimple.Data 默认生成的查询和性能
【发布时间】:2012-10-17 16:32:05
【问题描述】:

我正在考虑为我的 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。

【问题讨论】:

  • 顺便说一句,如果您 /any/ 知道我花了多少时间优化 Simple.Data 以获得快速性能,那么您会从您的问题中编辑该句子。 :(

标签: asp.net sql simple.data micro-orm


【解决方案1】:

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

尝试通过 SQL Management Studio 运行一些查询并查看执行计划以了解它们是如何实际优化和执行的。或者只是尝试您认为会更好的 SQL,并与 Simple.Data 生成的相比,看看它的实际执行情况。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 除了Nathan的回复,Simple.Data v1.0目前不支持创建子查询。不过,它计划包含在 v1.1 中。
    【解决方案3】:

    Simple.Data 的美妙之处在于,如果您对它生成的 sql 有任何疑问或问题,您可以调用存储过程:

    db.ProcedureWithParameters(1, 2);
    

    【讨论】:

    • 出于好奇这是如何工作的。 milz 是否编辑了我的帖子并对其投了反对票?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 2016-04-22
    • 2014-09-08
    • 2023-04-02
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多