【问题标题】:How to get data in chunks from very large table which has primary key column data type as varchar如何从具有主键列数据类型为 varchar 的非常大的表中获取块中的数据
【发布时间】:2016-07-08 22:12:14
【问题描述】:

我想从包含 2800 万行的表中检索数据。我想一次检索 100 万行。

我已从以下链接检查答案 Get data from large table in chunks How can I get a specific chunk of results? 该解决方案建议一个具有 int ID 列的查询。就我而言,我的主键列以 varchar(15) 作为数据类型

我想使用这样更快的东西 - 选择前 2000 * 从T 其中 ID >= @start_index 按 ID 排序

但由于 ID 列是 varchar,我不能使用整数索引。

如何有效地从具有 varchar 数据类型的主键的表中获取数据块?

【问题讨论】:

  • 重新设计您的数据模型。
  • 数据库是只读的。我无法对数据库进行任何更改
  • 即使您的 ID 是 Varchar,您的主键列中存在什么样的值。字母数字或数字数据
  • ID 包含字母数字数据,还包含 $ 和 _ 等字符
  • 你想根据什么条件从 2800 万条数据中检索 100 万条数据

标签: sql-server sql-server-2012


【解决方案1】:

因为您的主键必须是唯一的,所以同样的方法也可以。您可以将 >= 与字符列一起使用。

【讨论】:

    【解决方案2】:

    我建议像这样使用偏移量 ORDER BY:

    SELECT * 
    FROM t
    ORDER BY ID
    OFFSET 1000 ROWS FETCH NEXT 500 ROWS ONLY;
    

    这种方式非常灵活。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2017-04-05
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 2021-11-10
      相关资源
      最近更新 更多