我正在编写一个应用程序,它会读取整个表格,进行一些处理,然后将结果数据写入另一个表格。我正在使用
目前我正在使用
我希望选择数据的速度应该始终比插入快。那么,从表中选择所有行和列的最快方法是什么? 问题的答案如下:
- 我用两种方式计时了我的选择操作需要2.5秒。第一种是在运行我的应用程序并运行sql跟踪时。第二种是在SSMS中运行相同的查询。两者返回的结果大致相同。 - 我正在使用SqlDataReader读取数据。 - 没有其他应用程序正在使用此数据库。 - 我当前的处理时间少于1秒,因此2+秒的读取时间相对较长。但主要是关注当扩展到100,000行和数百万行时的性能。 - Sql Server 08r2和我的应用程序都在我的开发机上运行。 - 一些数据处理是基于设置的,因此我需要将整个表格存储在内存中(为了支持更大的数据集,我知道这一步可能需要转移到SQL中,以便我只需要在内存中对每一行进行操作)。
以下是我的代码:
SqlBulkCopy
类(.net版本的“bcp in”),它可以非常快速地插入数据。但是我找不到任何有效的方法来选择数据。似乎没有 .net 版本的 "bcp out",这对我来说很奇怪。目前我正在使用
select * from table_name
。以6,000行为例,需要2.5秒才能完成选择...而仅需600毫秒即可批量插入相同数量的行。我希望选择数据的速度应该始终比插入快。那么,从表中选择所有行和列的最快方法是什么? 问题的答案如下:
- 我用两种方式计时了我的选择操作需要2.5秒。第一种是在运行我的应用程序并运行sql跟踪时。第二种是在SSMS中运行相同的查询。两者返回的结果大致相同。 - 我正在使用SqlDataReader读取数据。 - 没有其他应用程序正在使用此数据库。 - 我当前的处理时间少于1秒,因此2+秒的读取时间相对较长。但主要是关注当扩展到100,000行和数百万行时的性能。 - Sql Server 08r2和我的应用程序都在我的开发机上运行。 - 一些数据处理是基于设置的,因此我需要将整个表格存储在内存中(为了支持更大的数据集,我知道这一步可能需要转移到SQL中,以便我只需要在内存中对每一行进行操作)。
以下是我的代码:
DataTable staging = new DataTable();
using (SqlConnection dwConn = (SqlConnection)SqlConnectionManager.Instance.GetDefaultConnection())
{
dwConn.Open();
SqlCommand cmd = dwConn.CreateCommand();
cmd.CommandText = "select * from staging_table";
SqlDataReader reader = cmd.ExecuteReader();
staging.Load(reader);
}