我的 LAMP 服务器具有快速存储和大量内存和处理器能力。
有2个表具有相同的结构,一个表有30.000.000个记录,另一个表是空的。 我想将数据从第一个表复制到第二个表并使用此请求:
INSERT INTO table2 SELECT * FROM table1 ;
此请求需要4个多小时才能完成。我认为这不正常,因为mysqldump
的{{1}}。
entire database finishes less then hour
请求是否有任何限制?或者我必须使用其他代码SELECT
?
答案 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;