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


Mysql query eating large amount of space using limit

我试图查询一个非常大的表,大约35+百万行处理每一行1 × 1,因为我不能在php中拉一次完整的数据库(内存不足),我在循环中使用'limit',但每次它试图查询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 ";
    ....
}

您可以使用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'];
    }
}