我试图在一个非常大的表中查询大约35亿行以逐行处理每一行,因为我无法立即在php中提取完整数据库(内存不足)我&# 39; m使用'限制'在循环中但每次尝试查询700K标记时都会抛出磁盘空间不足错误(错误28)
select * from dbm_new order by id asc limit 700000,10000
我一下子将10K行拉入php,我甚至可以让它在100K行中拉动它仍然会引发同样的错误,尝试从700K行开始,我可以看到它吃了一个巨大的磁盘空间量。
在php中,我在每次循环后释放结果集
mysql_free_result ($res);
但它不是PHP相关问题,我只在mysql中运行查询并且它给出了同样的错误
为什么在700K标记处开始限制占用了如此多的磁盘空间,我在这里谈论超过47gig,当然它不需要那么大的空间,我还有什么其他选择?
这里是代码
$start = 0;
$increment = 10000;
$hasResults = true;
while ($hasResults) {
$sql = "select * from dbm_new order by id asc limit $start,$increment ";
....
}
答案 0 :(得分:0)
您可以使用PK而不是OFFSET
来获取数据块:
$start = 0;
while(1) {
$sql = "SELECT * FROM table WHERE id > $start ORDER BY id ASC LIMIT 10000";
//get records...
if(empty($rows)) break;
foreach($rows as $row) {
//do stuff...
$start = $row['id'];
}
}