小编san*_*owi的帖子

EF 核心 QueryFilter 的性能问题

在我们的系统中,我们在 EF 核心中使用 QueryFilters 时遇到了性能问题。问题在于 EF 核心过滤器在 LEFT JOIN 内部进行过滤,而不是在其外部进行过滤。

生成的 SQL 看起来像这样:

SELECT [pom].[Id],
        [pom].[DeleteDate],
        [pom].[UpdateDate],
        [pom].[Version],
        [t].[Id],
        [t].[MandatorId],
        [t].[NetPriceAmount],
        [t].[NetPriceCurrencyIso4217Code]
FROM [externaldata].[PurchaseOfferMetadata] AS [pom]
    LEFT JOIN (
    SELECT [po].[Id],
            [po].[MandatorId],
            [po].[NetPriceAmount],
            [po].[NetPriceCurrencyIso4217Code]
    FROM [externaldata].[PurchaseOffer] AS [po]
    WHERE [po].[MandatorId] = 1
) AS [t] ON [pom].[Id] = [t].[Id]
WHERE [pom].[Id] IN 
    (CAST(3094411 AS bigint), 
    CAST(4757070 AS bigint), 
    CAST(4757112 AS bigint), 
    CAST(5571232 AS bigint))
Run Code Online (Sandbox Code Playgroud)

有问题的部分是WHERE [po].[MandatorId] = 1. 如果这是在第二个WHERE语句中,则查询运行得更快。

数据库模型配置如下:

modelBuilder.Entity<PurchaseOffer>()
      .HasQueryFilter(po => po.MandatorId == 1) …
Run Code Online (Sandbox Code Playgroud)

c# sql entity-framework ef-core-2.0 ef-core-2.1

6
推荐指数
1
解决办法
571
查看次数

标签 统计

c# ×1

ef-core-2.0 ×1

ef-core-2.1 ×1

entity-framework ×1

sql ×1