【问题标题】:How can I get a batch at a time of all the rows in a sql table?如何一次获取 sql 表中所有行的批处理?
【发布时间】:2010-10-17 07:47:01
【问题描述】:

我有一个有 4000 万行的表。
我想一次提取大约 200 万个并“处理”它们。
为什么?
处理超过 1000 万行的 Cos 处理会降低性能,并且经常超时。 (我需要这个工作独立于数据大小,所以我不能只是不断增加超时限制。)
另外,我正在使用 SQL Server。

【问题讨论】:

    标签: sql-server batch-processing row-number


    【解决方案1】:

    是否有递增的密钥,例如身份密钥?它是聚集索引吗?如果是这样,跟踪你得到的最后一个键应该相当简单,并执行以下操作:

    SELECT TOP 1000000 *
    FROM [MyTable]
    WHERE [Id] > @LastId
    ORDER BY [Id]
    

    另外 - 请务必使用ExecuteReader 之类的内容阅读它,这样您就不会缓冲太多行。

    当然,除了几千行之外,您还不如接受偶尔的往返,并一次请求(例如)10000 行。我认为这实际上不会降低效率(到处都是几毫秒)。

    【讨论】:

    • 我没有身份密钥。如果我这样做了,生活会很简单。也许我会去为 dang 表添加一个身份密钥。
    猜你喜欢
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2021-01-23
    • 2015-07-07
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多