为什么SELECT-INSERT请求如此之长?

时间:2012-10-01 12:01:02

标签: mysql lamp

我的 LAMP 服务器具有快速存储和大量内存和处理器能力。

有2个表具有相同的结构,一个表有30.000.000个记录,另一个表是空的。 我想将数据从第一个表复制到第二个表并使用此请求:

 INSERT INTO table2 SELECT * FROM table1 ;

此请求需要4个多小时才能完成。我认为这不正常,因为mysqldump的{​​{1}}。

entire database finishes less then hour请求是否有任何限制?或者我必须使用其他代码SELECT

4 个答案:

答案 0 :(得分:0)

这可能取决于管理任务,例如索引数据和分配存储空间。

答案 1 :(得分:0)

3000万很多。你在比特中查询,比如在每个查询中得到100-1000个结果。

我建议你在操作区使用phpmyadmin(选择源表1st),你会看到复制表。

如果要复制不同的位置,请使用mysqlworkbench导出并导入新表。希望这有帮助。

答案 2 :(得分:0)

确保架构与第一个表格一样,然后在插入查询中给出值的顺序。 * 会降低选择查询的效果,而 NoLock 会提高数据可用性

Begin Tran
      INSERT INTO (Col1,Col2, Col3,...Coln) table2 
    SELECT (Col1,Col2, Col3,...Coln) FROM table1 with (NoLock)
Commit

答案 3 :(得分:0)

添加超过几千条记录时,尤其是在您正在写入的表未使用时。添加时关闭索引,然后重新打开它们。如果您有多个索引,请全部完成。

ALTER TABLE table_name DISABLE KEYS;

导入您的数据并重新打开。

ALTER TABLE table_name ENABLE KEYS;

有关详细信息,请参阅http://support.tigertech.net/mysql-large-inserts