【问题标题】:Simple data fetch from SQL Server takes too long - .NET从 SQL Server 获取简单数据需要很长时间 - .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 分享)以及表和索引定义。除非这是一个索引视图,它没有索引,我们需要查看基表

标签: c# .net sql-server sqlperformance


【解决方案1】:

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

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

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

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

【讨论】:

  • 我试过不用DTO,还是一样。奇怪
猜你喜欢
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多