【发布时间】:2018-06-05 05:08:04
【问题描述】:
我已经在我的电脑上安装了 Sql Server Management Studio。
然后我远程连接到我的一个数据库
我执行的查询在 1 或 2 秒内返回 6000 条记录 但是当我从 .Net 应用程序(WPF 桌面)也从同一台 PC 运行相同的查询时,数据传输几乎需要 8-9 秒
我在 .Net 中的代码非常简单明了
这是代码
Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
Dim Sql_Connection As New SqlClient.SqlConnection("MyRemoteSQLConnectionString")
Dim Sql_Command As New SqlClient.SqlCommand("select Col1,Col2,Col3,Col4,Col5,Col6 from Table", Sql_Connection)
Sql_Connection.Open()
dr = Sql_Command.ExecuteReader
Dim DataTable As New DataTable
DataTable.Load(dr)
'The above code takes 8-9 seconds to finished but in ssmo takes only 1-2 seconds for 6000 Records
Sql_Connection.Close()
End Sub
为什么会这样?剂量 ssms 有不同的方式来管理传输的数据?
【问题讨论】:
-
没有区别。您将查询发送到服务器的方式不会影响它在服务器上的执行方式。如果您发现差异,那是您的代码。顺便说一句,它不会像您认为的那样做。该查询在您调用
ExecuteReader时执行。Load在本地运行并将结果加载到数据表中。您没有发布 SSMO 代码,但我猜它不会加载任何结果 -
BTW 6000 条记录很少需要 2 秒,而且太多而无法显示给人类。事实上,用户可能不会阅读所有记录,只阅读前几页。一次加载所有 6K 记录会浪费时间而没有太多好处。如果您打算在网格上显示它们,请使用分页和/或虚拟滚动来仅加载您要显示的内容
-
尝试运行分析器以查看执行了哪些实际查询。您可能会看到可以解释原因的差异。
-
我的意思是,如果 ssms 需要 2 秒才能通过网络将近 3mb 数据从远程数据库传输到我的本地 PC,并在 2 秒内给我 ssms 的结果,为什么 DT.Load 需要8 秒填充数据?剂量 ssms 处理通过网络传输数据的不同方式?或处理如何在结果面板中显示数据的不同方式?因为 ssms 和 .net 都针对相同的 connectionString 执行相同的查询,并试图确定为什么 .net 需要 8 秒而 ssms 需要 2 秒才能显示结果。
-
@user2160275,SSMS 也使用 ADO.NET。查询计划可能不同。我建议你仔细阅读sommarskog.se/query-plan-mysteries.html。
标签: .net sql-server performance management-studio-express