【问题标题】:How to load a huge data set into newly created table?如何将庞大的数据集加载到新创建的表中?
【发布时间】:2014-11-30 17:30:04
【问题描述】:

我正在尝试将 FULLTEXT 索引到我的表中。该表包含 300 万条记录。使用 Alter table 语句或 Create index 语句插入该索引非常困难。因此最简单的方法是创建新表和第一次添加索引并加载数据。如何将现有表数据加载到新创建的表中?我正在使用 Xammp MySql 数据库。

【问题讨论】:

    标签: mysql sql full-text-search full-text-indexing


    【解决方案1】:

    我不知道为什么在现有表上创建全文索引会很困难。你只需这样做:

    create fulltext index idx_table_col on table(col)
    

    通常,向已加载的表添加索引比将数据加载到具有预定义索引的空表中更快。

    编辑:

    您可以使用insert 进行加载。以下将插入前 100,000 行:

    insert into newtable
        select *
        from oldtable
        order by id
        limit 0, 100000;
    

    您可以将它放在一个循环中(通过 MySQL 中的存储过程或在应用程序级别)。也许这会更快地返回。每次运行时,都会更改limit 中的偏移值。

    我希望创建索引的总时间会比使用insert 少,但出于您的目的,您可能会发现这更方便。

    【讨论】:

    • 我不确定 - 索引创建可以锁定表不被使用。因此,有一种特殊情况,您可能希望单独创建表并使用已创建的索引将数据加载到其中,然后只需切换表。但我知道这是一个非常特殊的情况,而且是面向运行时变化的。
    • @Gordon Linoff 实际上,当我尝试使用 Alter table 语句创建索引时,我的浏览器正在创建,只是等待并卡住了我的机器。热量和 ram 达到约 70%。我不知道原因。这就是我的表包含大约 300 万的原因吗?
    • 要创建索引的列有多大?
    • @Uhla 列包含 300 万条记录 varchar(1000) 类型。耗费大量时间,我的 ram 达到 70%。您是否尝试过使用 create index 语句将全文索引添加到大量数据集?
    • @Gordon Linoff 感谢。 “创建索引的总时间更少”。我也这么认为。但是,当我尝试使用创建语句时,浏览器只是检索显示连接并花费大量时间的原因是什么。现在大约10多分钟。这有什么原因吗?
    【解决方案2】:
    INSERT INTO newTable SELECT * FROM oldTable;
    

    在创建新表和索引后。 这是因为您要复制所有列。您也可以选择特定的列。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-29
    • 2011-11-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    相关资源
    最近更新 更多