首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Linq实体继承生成大型SQL语句

Linq实体继承生成大型SQL语句
EN

Stack Overflow用户
提问于 2009-11-25 09:39:29
回答 1查看 381关注 0票数 0

我们正在开发一个具有超过10个子实体(继承自它)的基本实体的应用程序。

当我们使用Linq向基本实体发出任何请求时,我们都会得到一个SQL语句,每个子实体都有一个"UNION ALL“。要对基本实体执行Count(),需要近一秒的时间,而只获取一行可能需要两秒。

对于此代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public bool Exists(int appId, string loginName, DateTime userRegDate, long ahsayId)
    {
        var backupsets = from backupset in _entities.AhsayBackupSets
                         where
                            backupset.User.Appliance.Id == appId &&
                            backupset.User.LoginName == loginName &&
                            backupset.User.RegistrationDate == userRegDate &&
                            backupset.AhsayId == ahsayId
                         select backupset;
        return backupsets.Count() > 0;
    }

,我们得到这个SQL语句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exec sp_executesql N'SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    COUNT(1) AS [A1]
    FROM    [dbo].[AhsayBackupSets] AS [Extent1]
    LEFT OUTER JOIN  (SELECT 
        [UnionAll9].[C1] AS [C1]
        FROM  (SELECT 
            [UnionAll8].[C1] AS [C1]
            FROM  (SELECT 
                [UnionAll7].[C1] AS [C1]
                FROM  (SELECT 
                    [UnionAll6].[C1] AS [C1]
                    FROM  (SELECT 
                        [UnionAll5].[C1] AS [C1]
                        FROM  (SELECT 
                            [UnionAll4].[C1] AS [C1]
                            FROM  (SELECT 
                                [UnionAll3].[C1] AS [C1]
                                FROM  (SELECT 
                                    [UnionAll2].[C1] AS [C1]
                                    FROM  (SELECT 
                                        [UnionAll1].[Id] AS [C1]
                                        FROM  (SELECT 
                                            [Extent2].[Id] AS [Id]
                                            FROM [dbo].[AhsayOracleBackupSets] AS [Extent2]
                                        UNION ALL
                                            SELECT 
                                            [Extent3].[Id] AS [Id]
                                            FROM [dbo].[AhsaySystemStateBackupSets] AS [Extent3]) AS [UnionAll1]
                                    UNION ALL
                                        SELECT 
                                        [Extent4].[Id] AS [Id]
                                        FROM [dbo].[AhsayMysqlBackupSets] AS [Extent4]) AS [UnionAll2]
                                UNION ALL
                                    SELECT 
                                    [Extent5].[Id] AS [Id]
                                    FROM [dbo].[AhsayMssqlBackupSets] AS [Extent5]) AS [UnionAll3]
                            UNION ALL
                                SELECT 
                                [Extent6].[Id] AS [Id]
                                FROM [dbo].[AhsayFileBackupSets] AS [Extent6]) AS [UnionAll4]
                        UNION ALL
                            SELECT 
                            [Extent7].[Id] AS [Id]
                            FROM [dbo].[AhsayExchangeServerBackupSets] AS [Extent7]) AS [UnionAll5]
                    UNION ALL
                        SELECT 
                        [Extent8].[Id] AS [Id]
                        FROM [dbo].[AhsayDominoBackupSets] AS [Extent8]) AS [UnionAll6]
                UNION ALL
                    SELECT 
                    [Extent9].[Id] AS [Id]
                    FROM [dbo].[AhsayNotesBackupSets] AS [Extent9]) AS [UnionAll7]
            UNION ALL
                SELECT 
                [Extent10].[Id] AS [Id]
                FROM [dbo].[AhsayShadowProtectBackupSets] AS [Extent10]) AS [UnionAll8]
        UNION ALL
            SELECT 
            [Extent11].[Id] AS [Id]
            FROM [dbo].[AhsayWindowsSystemBackupSets] AS [Extent11]) AS [UnionAll9]
    UNION ALL
        SELECT 
        [Extent12].[Id] AS [Id]
        FROM [dbo].[AhsayExchangeMailBackupSets] AS [Extent12]) AS [UnionAll10] ON [Extent1].[Id] = [UnionAll10].[C1]
    LEFT OUTER JOIN [dbo].[AhsayUsers] AS [Extent13] ON [Extent1].[AhsayUserId] = [Extent13].[Id]
    INNER JOIN [dbo].[AhsayUsers] AS [Extent14] ON [Extent1].[AhsayUserId] = [Extent14].[Id]
    WHERE ([Extent13].[ApplianceId] = @p__linq__0) AND ([Extent13].[LoginName] = @p__linq__1) AND ([Extent14].[RegistrationDate] = @p__linq__2) AND ([Extent1].[AhsayId] = @p__linq__3)
)  AS [GroupBy1]',N'@p__linq__0 int,@p__linq__1 nvarchar(4000),@p__linq__2 datetime,@p__linq__3 bigint',@p__linq__0=2,@p__linq__1=N'antonio',@p__linq__2='2009-10-22 18:07:17',@p__linq__3=1256305376226

正如您可以想象的那样,这需要很多时间(在本例中是1秒,但还有一个句子要长得多,需要4秒),并且这个查询被多次执行。

有什么方法可以减少SQL开销吗?我们知道我们可以使用存储过程来处理繁重的句子,但我们不想失去Linq的灵活性。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2009-11-28 09:05:02

Wow..that是一个很长的查询string..Have,你可以在.NET 4.0中尝试一下,看看会发生什么。也许你会得到一个更短的sql字符串。EF团队进行了许多性能改进

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1795758

复制
相关文章
Swift 范的 CGRect、CGSize 和 CGPoint(转)
从我决定拥抱 Swift 到现在已经 8 个月了。这几个月中,我一边学习着如何避免写出 Objective-C 风格的 Swift 代码,一边真正开始使用这门新语言。
VV木公子
2018/06/05
7.4K0
C# 永远不会返回的方法真的不会返回
一般情况下,如果一个方法声明了返回值,但是实际上在编写代码的时候没有返回,那么这个时候会出现编译错误。
walterlv
2020/02/10
9490
android bindservice方法,Android bindservice方法返回false
我想从另一个类(BaseExpandableListAdapter)的活动中调用一个方法。活动中的方法启动服务并调用bindService(,,)方法。但是,bindService方法总是返回false。我查了其他类似的帖子,但没有一个解决了我的问题。任何评论非常感谢。Android bindservice方法返回false
全栈程序员站长
2022/09/01
1.2K0
controller方法的返回值
需要方法结束时,定义ModelAndView,将model和view分别进行设置。
用户10325771
2023/03/14
2K0
controller方法的返回值
PHP方法的返回值
不仅是PHP,大部分编程语言的函数或者叫方法,都可以用return来定义方法的返回值。从函数这个叫法来看,本身它就是一个计算操作,因此,计算总会有个结果,如果你在方法体中处理了结果,比如进行了持久化保存,那么这个函数就不用返回任何内容。而计算的结果是要给外部使用的,这时候就要将计算结果进行返回了。
硬核项目经理
2020/02/17
7.7K0
点击返回键退出popupwindow的方法
mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
全栈程序员站长
2022/07/08
1.1K0
返回顶部的几种方法总结
<a href=”javascript:scroll(0,0)”>返回顶部</a>
全栈程序员站长
2022/09/07
1K0
网页返回顶部的几种方法
这种方法是在页面现有的标签中,使用“返回顶部”的连接的href指向顶部具有id属性的标签,以实现返回顶部的功能。这种方法,需要在页面顶部的标签中有具有id属性的标签,来实现指向顶部。亦可自定义添加。
全栈程序员站长
2022/07/08
2.6K0
网页返回顶部的几种方法
数组的splice方法和slice方法_splice方法返回值
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/08
1.5K0
返回顶部的五种实现方法
上面几种方式实现起来比较简单,但是效果生硬,直接从底部切换到顶部,没有一个过渡的动画。此方法能使页面动态滚动,同时将按钮换成一个箭头标志,判断页面滚动的距离,当页面滚动到一定的距离后再显示返回顶部箭头标志。这样的效果更佳生动。
全栈程序员站长
2022/09/07
5.2K0
构造方法或new返回该对象
一个小技巧,调用构造方法或都new返回该对象: function Person(){ // ... // 不是new的时候this指向的是调用者 默认是window if (!(this instanceof Person)) { return new Person(); } } Person.prototype.sayHello = function (){ console.log("Hello World!"); } var lufei = Person(); lufe
kai666666
2020/10/17
7280
【说站】python int返回的方法探究
python int返回的方法探究 1、int额外的方法: int.bit_length() 返回二进制表示整数所需的位数,不包括符号位和前面的零: >>> n = -37 >>> bin(n) '-0b100101' >>> n.bit_length() 6 2、返回表示整数的字节组。 (1024).to_bytes(2, byteorder='big') b'\x04\x00' (1024).to_bytes(10, byteorder='big') b'\x00\x00\x00\x00\x00\
很酷的站长
2022/11/23
7720
【说站】python int返回的方法探究
Java 中如何限制方法的返回时间
可以使用 JDK 中的 ExecutorService 方法来对调用的方法进行处理。
HoneyMoose
2023/02/10
3.1K0
Java 中如何限制方法的返回时间
IE中 时间对象方法getTime返回NaN
在IE中使用Date对象的getTime方法解析以下格式的日期时(2020-12-14 16:00:00)会返回NaN,原因是在IE中使用该方法时参数的格式必须为YYYY/MM//DD
peng_tianyu
2022/12/15
1.2K0
php unserialize 返回false的解决方法
php 提供serialize(序列化) 与unserialize(反序列化)方法。
全栈程序员站长
2022/07/11
1K0
WPF 网络 request 的 read 方法不会返回
我最近为宝资通写软件,这个软件需要从网上下网页。但是使用 HttpRequest 的时候发现 StreamReader 等方法可能等待很久不会返回,能否有方法设置超时解决卡住线程
林德熙
2022/08/04
6740
Microsoft/thrifty:RPC方法返回NULL的异常处理
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/86244875
10km
2019/05/25
1.4K0
SYSLIB1007:日志记录方法必须返回 void
使用 LoggerMessageAttribute 属性进行注释的方法返回了一个值。
呆呆
2022/01/06
2160
获取main方法的返回值「建议收藏」
Windows:要在windows系统下查看状态,键入C:directory>echo %ERRORLEVEL% (编译、链接程序之后,生成.exe文件,在cmd中运行.exe文件之后,运行C:directory>echo %ERRORLEVEL% 可以查看它的返回值。)
全栈程序员站长
2022/08/30
1.5K0
点击加载更多

相似问题

XML大文件处理

111

解析和处理XML大文件

012

一个对大文件有效的轻量级XML解析器?

82

寻找轻量级pdf查看器

32

ODI可以处理的最大文件大小

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文