3

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

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

 INSERT INTO table2 SELECT * FROM table1 ;

此请求需要超过 4 小时才能完成。我认为这是不正常的,因为mysqldump.entire database finishes less then hour

SELECT请求有限制吗?或者我必须使用其他代码optimize performance

4

4 回答 4

1

确保架构与第一个表一样,然后在Insert query中给出值的顺序。*降低了Select 查询的性能,而NoLock增加了数据的可用性

喜欢,

Begin Tran
      INSERT INTO (Col1,Col2, Col3,...Coln) table2 
    SELECT (Col1,Col2, Col3,...Coln) FROM table1 with (NoLock)
Commit
于 2012-10-01T12:14:08.820 回答
0

这可能归结为诸如索引数据和分配存储空间之类的内务处理任务。

于 2012-10-01T12:10:03.540 回答
0

3000万是很多。您以位查询,例如每个查询中的 100 - 1000 个结果。

或者

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

或者

如果您要跨不同位置进行复制,请使用 mysqlworkbench 在新表中导出和导入。希望这可以帮助。

于 2012-10-01T12:11:50.420 回答
0

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

更改表table_name禁用键;

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

更改表table_name启用键;

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

于 2012-10-01T12:14:21.207 回答