如何将数据从 table 移动到另一个 Mysql big table
How to move data from table to an other in Mysql big table
我有一个很大的 table 大约 200,000,000 行 MYISAM,它有一个组合主键
但是我没有索引。
我想创建一个索引,但问题是 table 服务器在我执行添加索引请求时损坏了:
ALTER TABLE `db`.`table`
ADD INDEX `index_0001` (`col1` ASC);
所以我将创建一个新的 table 并配置所需的索引并将数据移动到新的 table 并重命名它。
我试过这个操作:
INSERT INTO `db`.`table` (field1,field2,..) select field1,field2,....from eventdata limit 100000 offset 0 ;
INSERT INTO `db`.`table` (field1,field2,..) select field1,field2,....from eventdata limit 100000 offset 100000 ;
INSERT INTO `db`.`table` (field1,field2,..) select field1,field2,....from eventdata limit 100000 offset 200000 ;
.......... etc
但是当偏移量超过 100,000,000 时,查询行响应变得更慢。
还有其他解决方案吗?
tahnks
使用limit 100000 offset 100000 ;
表示MySQL搜索了100000条记录,从100001开始得到记录;
搜索100000条记录是TABLEFULL SCAN,所以很慢;
使用Primary key
搜索是更好的方法,例如... where pk >=100000 and pk <= 199999
如果Primary key
不能分成Number,用Join
select field1,field2... from tbname tb1,(select pk from tbname limit 100000 offset 100000)tb2 where tb1.pk = tb2.pk
使用Primary key
搜索记录优于TABLE FULL SCAN;
我有一个很大的 table 大约 200,000,000 行 MYISAM,它有一个组合主键 但是我没有索引。
我想创建一个索引,但问题是 table 服务器在我执行添加索引请求时损坏了:
ALTER TABLE `db`.`table`
ADD INDEX `index_0001` (`col1` ASC);
所以我将创建一个新的 table 并配置所需的索引并将数据移动到新的 table 并重命名它。
我试过这个操作:
INSERT INTO `db`.`table` (field1,field2,..) select field1,field2,....from eventdata limit 100000 offset 0 ;
INSERT INTO `db`.`table` (field1,field2,..) select field1,field2,....from eventdata limit 100000 offset 100000 ;
INSERT INTO `db`.`table` (field1,field2,..) select field1,field2,....from eventdata limit 100000 offset 200000 ;
.......... etc
但是当偏移量超过 100,000,000 时,查询行响应变得更慢。
还有其他解决方案吗?
tahnks
使用limit 100000 offset 100000 ;
表示MySQL搜索了100000条记录,从100001开始得到记录;
搜索100000条记录是TABLEFULL SCAN,所以很慢;
使用Primary key
搜索是更好的方法,例如... where pk >=100000 and pk <= 199999
如果Primary key
不能分成Number,用Join
select field1,field2... from tbname tb1,(select pk from tbname limit 100000 offset 100000)tb2 where tb1.pk = tb2.pk
使用Primary key
搜索记录优于TABLE FULL SCAN;