从 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
已经具有ID
和UUID
作为属性。
为什么还要将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 组需要很长时间