MySQL 5.6:我正在尝试以不同的方式将数据从一个表复制到另一个表。源表位于远程服务器上,大约有 500,000 行 - 我使用联合引擎进行连接。我首先尝试了这个:
mysql > create table tgt as select * from src;
这非常快,只需要几秒钟,但它会发出警告:
...
| Warning | 1299 | Invalid TIMESTAMP value in column 'created_timestamp' at row 265975 |
| Warning | 1299 | Invalid TIMESTAMP value in column 'created_timestamp' at row 265976 |
...
64 rows in set (0.00 sec)
我试着用一个存储过程来做,打开一个游标,获取行并插入它们,但这需要很长时间;10分钟后我取消了。
那么,有没有办法找到导致问题的行?我试过select ... limit #first_row,#last_row;
了,但它似乎不起作用,我不确定它是否完全可靠。
要找到您想查看的行,您必须做两件事:
为什么要改变创建表的方式???
当你这样做时
您创建
tgt
没有任何索引的表。您可以通过运行来验证这一点你会看到
src
它的索引和tgt
没有它们。因此,在没有索引的情况下,表加载将是最快的。如果你至少有一个主键。您可以通过一些数字
id
列浏览表格。因此,要创建带有索引的表,请执行以下操作:
然后你可以运行
并看到它们在结构上是相同的。
为什么要更改将数据加载到表中的方式???
你可以像这样开始加载
加载完成后,您可以运行
您可以一瞥该行的外观,但
created_timestamp
可能未填充该行。如果正确填充,则问题基本上解决了。在不加载数据的情况下查看哪一行的另一种方法
created_timestamp
您可以通过做其他事情来隔离哪些行有问题这将向您显示将被插入的行。
这是我可以建议的所有帮助,因为我不知道表结构是什么。