mysql数据库,一次遍历全部几万条数据。怎么处理才好?
前提:有一个mysql数据库的表里有几万条记录,我现在写的一个php程序里有个循环结束的条件是,把这几万条记录从头到尾遍历一次。问题:我想知道,应该用什么方式使用这几万条...
前提:
有一个mysql数据库的表里有几万条记录,我现在写的一个php程序里有个循环结束的条件是,把这几万条记录从头到尾遍历一次。
问题:
我想知道,应该用什么方式使用这几万条记录程序最快,最省服务器资源?
是一次把几万条全取出来,在内存中做操作?
还是一次取一条?
或有没有其它好办法? 展开
有一个mysql数据库的表里有几万条记录,我现在写的一个php程序里有个循环结束的条件是,把这几万条记录从头到尾遍历一次。
问题:
我想知道,应该用什么方式使用这几万条记录程序最快,最省服务器资源?
是一次把几万条全取出来,在内存中做操作?
还是一次取一条?
或有没有其它好办法? 展开
2个回答
展开全部
其实就跟分页获取数据类似,网上这种例子就比较多了,分段获取你可以把当前获取的最大的自增id存储在文件、数据库或者memcache中,下一段用大于这个做条件,然后遍历完再更新这个数就行了。
追问
不用自增id来分段可否?
比如:上一段遍历保存的时间是:20130808001
表名是:t1
更新时间的字段名是:time
把t1表里的数据按time字段名排序
从t1表里的字段名time中找到20130808001这条记录,从这条开始取1000条记录
$t=20130808001;
SELECT * FROM t1 order by time DESC LIMIT $t,1000
求改正这句sql语句
谢谢
追答
时间是可以用,但是时间只能作为条件,你不存储自增id还是要存遍历的数字的
SELECT * FROM t1 where `time`>20130808001 order by time DESC LIMIT 1,1000
SELECT * FROM t1 where `time`>20130808001 order by time DESC LIMIT 1001,1000
……
另外强调一下,加了order by之后sql查询速度会明显下降,即便加了索引在大数据量的情况下还是会比较慢的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询