Mysql查询使用限制吃大量空间

时间:2014-03-17 08:14:06

标签: php mysql

我试图在一个非常大的表中查询大约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 ";

    ....

}

1 个答案:

答案 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'];
    }
}