gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:59:46 26 4
gpt4 key购买 nike

我正在编写一个读取整个表的应用程序,进行一些处理,然后将结果数据写入另一个表。我正在使用 SqlBulkCopy 类(“bcp in”的 .net 版本),它的插入速度非常快。但是我一开始就找不到任何有效的方法来选择数据。没有 .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);
}

最佳答案

select * from table_name读取整个表的最简单、最简单和最快的方法。

让我解释一下为什么你的结果会导致错误的结论。

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

关于c# - 在 SQL Server 中选择整个表的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5260153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com