使用Include()优化EF Core查询

时间:2018-09-07 11:00:15

标签: entity-framework optimization entity-framework-core

我的项目中有以下查询,它消耗大量时间来执行。我正在尝试对其进行优化,但无法成功实现。任何建议将不胜感激。

        const result = yield client.mutate({
            /* tslint:disable:max-line-length */
            mutation: gql`
                mutation licensemutation($distributor: String, $licenseType: String, $duration: String, $userId: String) {
                    addLicenseCode(distributor: $distributor, licenseType: $licenseType, duration: $duration, userId: $userId) {
                        code,
                        distributor, 
                        duration, 
                        oneTimeUsage, 
                        validFrom, 
                        validTo
                    }
                }
            `,
            /* tslint:enable */
            variables: {
                userId: username,
                distributor: distributor,
                licenseType: 'Premium',
            },
        });

2 个答案:

答案 0 :(得分:1)

Include()得到翻译后的联接,而您在代码中使用了太多的联接。您可以借助数据库引擎执行计划来优化索引。

我建议您不要一次使用全部Include。相反,您中断查询并逐个应用Include。我的意思是您应用Include, get the result and then apply the包含again and so..By having more than two包含`会影响性能。

答案 1 :(得分:0)

我在查询中没有发现任何性能问题。

由于您具有singleOrDefault,因此我将着眼于优化数据库调用。如果您有可用的分析工具,则在SQL Server Management Studio中选择工具> Sql Server Profiler。获取对SQL Server Management Studio的查询,标记查询并选择“在数据库引擎优化顾问中分析查询”