【问题标题】:SQL query is taking 25 seconds in ASP.NET to load pageSQL 查询在 ASP.NET 中需要 25 秒才能加载页面
【发布时间】:2019-04-19 12:12:53
【问题描述】:

如何提高页面加载速度以尽早获取数据?

select B.bdregno, B.srno, B.bdbillno, B.bdfees as bdfees, B.bdqty as bdqty,
       B.bdrcode as bdrcode, B.bdtno as bdtno, B.bdvdate as bdvdate, T.TNAME as TNAME 
from dbo.[test] T full outer join 
     dbo.[billdet] B 
     on T.TCODE = B.bdtcode 
where" + qr + " bdregno='" + hdfregno.Value + "' 
order by bdvdate asc, srno

查询在 SQL Server 中运行很快,但在 ASP.NET 应用程序中加载页面大约需要 25 秒。

【问题讨论】:

  • 请标记用于加载页面的编程语言。
  • 单步执行您的代码并确保它确实是一个简单的选择语句的执行,这导致了延迟。如果它在 SSMS 中运行良好,那么在从应用程序执行时,它没有理由表现得不一样
  • 正在传输的数据量是多少?
  • 很少使用完全外连接。你确定这是你需要的吗?
  • 您应该避免使用字符串连接来构建您的查询。使用查询参数或 Linq。

标签: sql asp.net sql-server tsql stored-procedures


【解决方案1】:

首先,我怀疑您是否真的想要一个完整的外部联接。我猜left join 就足够了:

select B.bdregno, B.srno, B.bdbillno, B.bdfees, B.bdqt,
       B.bdrcode, B.bdtno, B.bdvdate, T.TNAME 
from dbo.[billdet] B left join
     dbo.[test] T 
     on T.TCODE = B.bdtcode 
where b.bdregno = ?  --'" + hdfregno.Value + "' 
order by b.bdvdate asc, srno

对于此查询,您需要billdet(bdregno, bdtcode) 上的索引。引擎仍然需要做麦芽汁。

请注意,您应该将值作为 参数 传递,而不是修改查询字符串。

【讨论】:

  • 感谢您的帮助,我使用了它,但现在需要 15 到 18 秒
  • 这真的很有趣。如果full join 版本运行得更快,那么我怀疑您的表统计信息有问题。您需要深入了解执行计划,以了解 fullleft 加入版本之间的区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多