目前有一数据表格,该表格有大概300万条数据,我想逐条遍历一次,并计算每条的某个值。
目前采用LIMIT分页办法遍历,
"select * from weibo_emotion limit " + begin + ", " + 1000,大概是这样子,每次分页取出一千条,然后逐条计算。
但是我发现由于使用LIMIT语句,当beign 这个值逐渐增大时,这条语句执行的越来越慢,甚至达到几分钟。
请问各位高人 是否有其他快速的方法能够逐条遍历数据表。
此外 表中是有主键ID, 有索引。
4 个解决方案
#1
LIMIT N,M的时候,其实MYSQL本质上仍然需要从1到M,只不过1到N不输出处理而已。
#2
建议还是直接不加LIMIT一次性处理完成。
如果一定要加,则在上次LIMIT N,1000后记录下最后一个ID值,然后再下次时 where id>LastQueryID limit 1000
如果一定要加,则在上次LIMIT N,1000后记录下最后一个ID值,然后再下次时 where id>LastQueryID limit 1000
#3
limit主键 基本无延迟的情况
#4
以ID为标准分页?
如果是
select a.* from tt a inner join (select id from tt limit 1000,10) b
on a.id=b.id
如果是
select a.* from tt a inner join (select id from tt limit 1000,10) b
on a.id=b.id
#1
LIMIT N,M的时候,其实MYSQL本质上仍然需要从1到M,只不过1到N不输出处理而已。
#2
建议还是直接不加LIMIT一次性处理完成。
如果一定要加,则在上次LIMIT N,1000后记录下最后一个ID值,然后再下次时 where id>LastQueryID limit 1000
如果一定要加,则在上次LIMIT N,1000后记录下最后一个ID值,然后再下次时 where id>LastQueryID limit 1000
#3
limit主键 基本无延迟的情况
#4
以ID为标准分页?
如果是
select a.* from tt a inner join (select id from tt limit 1000,10) b
on a.id=b.id
如果是
select a.* from tt a inner join (select id from tt limit 1000,10) b
on a.id=b.id