【问题标题】:How to Know the estimated time of SQLCommand without execute the query?如何在不执行查询的情况下知道 SQLCommand 的估计时间?
【发布时间】:2017-05-24 15:58:11
【问题描述】:

用户有时在程序中启动一个非常大的查询以从 DB(在本例中为 SQLserver)中提取数据。

String SQL_SELECT = " SELECT * FROM BIG_TABLE";    

SqlConnection conn = null;
SqlDataReader aReader = null;

conn = getConnessione();

SqlCommand aCommand = new SqlCommand(SQL_SELECT, conn);

conn.Open();
aReader = aCommand.ExecuteReader();

可以知道命令前的预计时间

aReader = aCommand.ExecuteReader();

是否有命令或最佳实践?

【问题讨论】:

  • 我要在这里硬着头皮说不
  • 也许this post可以帮助你。
  • @diiN__________ 这需要运行查询
  • 是的,你可以估计。问题是,根据你想估计什么?没有 API 可以为您提供“需要 X 秒”的估计。如果你告诉我查询是SELECT * FROM Table,有多少行,行有多大,你的网络速度,你的服务器的内存,你的存储速度和你的应用程序的处理时间,我可以估计......但这可能是不是你要找的。典型的方法是提供适当的超时时间(默认为 30 秒),然后根据需要进行优化。
  • 哦,当然(差点忘了!)运行查询和测量。您可以在 production 上执行查询之前执行此操作——只需在之前对其进行测试。如果在测试机器上需要 3 个小时,那么生产可能会更快(取决于您的硬件),但可以肯定地说这不是一个快速查询。

标签: c# .net sql-server visual-studio tsql


【解决方案1】:

理论上你不会。

有很多因素在起作用。

表的大小,行数,列数,索引,查询因素,例如哪里(它将在哪里使用索引等),网络速度(例如,如果它是远程的,估计时间将比如果数据库更多托管在本地)等。

【讨论】:

  • 我只想考虑一个因素,SQLServer的执行时间
  • @daniele3004 不幸的是,所有这些以及更多都会影响执行时间。
  • 是的,但这对用户体验很重要
  • 进行估算的最佳方法是运行查询X 次数,然后使用您获得的平均时间作为估算值​​。如果不考虑ALL这些参数,就无法估计查询将花费的时间,甚至更是如此。
  • @daniele3004 某事对你很重要,并不意味着它是可能的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 2018-01-06
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 2021-12-29
相关资源
最近更新 更多