在SQL Server中选择整个表的最快方法是什么?

The*_*ean 6 .net c# sql sql-server-2008

我正在编写一个应用程序,它读取整个表,进行一些处理,然后将结果数据写入另一个表.我正在使用SqlBulkCopy类(.net版本的"bcp in"),它可以非常快速地插入.但我首先找不到任何有效的方法来选择数据.没有.net等效的"bcp out",这对我来说似乎很奇怪.

目前我正在使用select * from table_name.对于预期,选择6,000行需要2.5秒......并且只有600毫秒来批量插入相同数量的行.

我希望选择数据总是比插入更快. 从表中选择所有行和列的最快方法是什么?


qeustions的答案:

  • 我计时选择2.5秒2.首先是在运行我的应用程序并运行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);
}
Run Code Online (Sandbox Code Playgroud)

usr*_*ΛΩΝ 11

select * from table_name 读取整个表格的最简单,最简单,最快捷的方式.

让我解释为什么你的结果导致错误的结论.

  1. 复制整个表是一种优化的操作,只需要将旧的二进制数据克隆到新的二进制数据中(根据存储机制,最多可以执行文件复制操作).
  2. 写缓冲.DBMS说记录是写的,但它实际上还没有完成,除非你处理事务.磁盘操作通常会延迟.
  3. 查询表还需要(与克隆不同)将数据从二进制存储的布局/格式调整为最终可由客户端读取的驱动程序相关格式.这需要时间.