从 SQL Server 获取简单数据需要很长时间 - .NET

Posted

技术标签:

【中文标题】从 SQL Server 获取简单数据需要很长时间 - .NET【英文标题】:Simple data fetch from SQL Server takes too long - .NET 【发布时间】:2021-10-31 20:41:24 【问题描述】:

我在 .NET 中有这个简单的视图类:

public partial class vw_ViewFromMSSQL : BaseSQL
    
        public long ID  get; set; 
        public long databaseid  get; set; 
        public long prop2  get; set; 
        public long prop3  get; set; 

BaseSQL 在哪里:

public abstract class BaseSQL
    
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public long ID  get; set; 

        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid UUID  get; set; 
    

现在我有了这个简单的 LINQ,它应该返回给定 databaseid 的数据:

var data = await _context.vw_ViewFromMSSQL
                .Where(x => x.databaseid == databaseid )
                .Select(x=> new DTOClass()
                
                    ID = fks.ID,
                    databaseid = x.databaseid,
                    prop2 = x.prop2,
                    prop3 = x.prop3
                ).ToListAsync();

现在这个 data 在大约 10 秒内获取数据,即使它应该只返回 150 行。但是,如果我在 SQL Server 中运行查询,我会在 1 秒内得到结果。我有大量与其他视图相关的此类调用,但它们返回结果的速度比这快得多。这个视图有索引,它有类中描述的每一列。另一件需要注意的是,所有的电话都经过Task,所以它们是async 电话。

这更像是一个讨论而不是一个问题,但是这种缓慢的获取可能是什么原因,有没有办法加快速度?

【问题讨论】:

您需要运行 SQL Server Profiler 并查看实际发送到 SQL Server 的查询,然后您可以对其进行调整。 对于“获取速度慢的原因可能是什么”的答案是 LINQ to SQL 是愚蠢的。我并不是说你试图使用它是愚蠢的。我的意思是微软愚蠢地相信他们可以保护使用 SQL 数据库的开发人员不必学习任何 SQL。编写高性能 SQL 既是科学又是艺术,认为它可以从完全不同的语言自动生成是错误的。 嗯,我明白了。感谢大家的回答,这东西是迟钝的,当我通过其他道具过滤时,即使它获得 x3 倍的行数,它也会更快地获得结果 为了获得更好的性能帮助,我们需要查看查询计划(您可以通过brentozar.com/pastetheplan 分享)以及表和索引定义。除非这是一个索引视图,它没有索引,我们需要查看基表 【参考方案1】:

抽象类BaseSql 已经具有IDUUID 作为属性。 为什么还要将ID 添加到已经从基类继承而来的vw_ViewFromMSSQL

您还可以打开日志记录,以便查看底层查询。

您是否尝试过不映射到 DTO?所以只是:

var data = await _context.vw_ViewFromMSSQL
                         .Where(x => x.databaseid == databaseid )
                         .ToListAsync();

【讨论】:

我试过不用DTO,还是一样。奇怪

以上是关于从 SQL Server 获取简单数据需要很长时间 - .NET的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flex 时 SQL Server 需要很长时间才能将数据返回到 ColdFusion

数据库在 SQL Server 2012 上加入 HA 组需要很长时间

用于从表中获取记录的 SQL 查询需要很长时间,但是当我运行 exec sp_updatestats 时按预期工作

为啥 SQL Server 表值函数插入需要很长时间?

SQL Server:清理旧数据需要太长时间

SQL Server 2014 安装卡住(挂起)或需要很长时间才能完成