【问题标题】:Fastest way to copy percentage of rows from massive table?从海量表中复制行百分比的最快方法?
【发布时间】:2015-11-28 11:22:26
【问题描述】:

我有一个包含超过 30 亿行数据的大表 (db2.table1)。我正在尝试从那个非常大的表中选择一定百分比(例如 50%)的行并将其插入到另一个最初为空的表中。

我有这个问题

INSERT INTO db1.table1 (col1, col2, col3, col4)
SELECT TOP 50 PERCENT col1, col2, col3, col4 FROM db2.table1;

这可行,但它难以置信慢。仅仅选择了大约 80% 的表格就花了将近一个小时。但是,当我运行 select * 并在所有数据行上插入查询复制时(如下所示),它会在 3 分钟内完成。

INSERT INTO db1.table1 (col1, col2, col3, col4)
SELECT * FROM db2.table1;

根据我的研究,我认为这与 TOP 需要首先对数据行进行排序有关,这需要大量的磁盘 I/O,这可能会导致相当大的速度下降,尤其是在这么大的表上。

所以,我现在想知道,从一个非常大的表中选择并复制某些指定部分数据到另一个表中的最快方法是什么?选择的行不一定需要是随机的或以任何方式排序。

编辑:我应该补充一点,我真的不知道也不关心选择了哪些行,因为表包含随机生成的字母数字字符串。我只需要复制 x 行或 y % 的表格来进行测试。

【问题讨论】:

  • 第 1 步 - 确定要复制的行。
  • 第 2 步 - 将 "wanted" 行插入临时表。
  • 您的 Teradata 版本是什么? TOP 导致排序听起来像一个非常古老的。请改用SEELCT * FROM db2.table1 SAMPLE 0.5

标签: sql performance select insert teradata


【解决方案1】:

将表格导出到文件,剪切所需数量并导入文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多