0

我正在处理一个非常大的数据集(准确地说是 786,432 行)。

所以,为了防止内存限制,我想循环遍历 50,000 行的数据集,所以为了测试这个我想我会尝试:

function test(){
    $start = 0;
    $end = 50000;

    $q = $this->db->select('uuid')->from('userRegionLink')->limit($end, $start)->get();
    $i = 0;
    while($q->num_rows() != 0){
        echo 'Round: '.++$i.'<br />';
        echo 'Rows: '.$q->num_rows().'<br />';
        echo 'Start: '.$start.'<br />';
        echo 'End: '.$end.'<hr />';

        $start = $end;
        $end = $end+50000;
        $q = $this->db->select('uuid')->from('userRegionLink')->limit($end, $start)->get();
    }
}

但是我的结果很奇怪:看第9轮及以下。

这是什么原因造成的?

回合:1
行:50000
开始:0
结束:50000


轮次:2
行:100000
开始:50000
结束:100000
轮次:3
行:150000
开始:100000
结束:150000
轮次:4
行:200000
开始:150000
结束:200000
轮次:5
行:250000
开始:200000
结束:250000
轮次:6
行:300000
开始:250000
结束:300000
轮次:7
行:350000
开始:300000
结束:350000
轮次:8
行:400000
开始:350000
结束:400000
轮次:9
行:386432
开始:400000
结束:450000
轮次:10
行:336432
开始:450000
结束:500000
轮次:11
行:286432
开始:500000
结束:550000
轮次:12
行:236432
开始:550000
结束:600000
轮次:13
行:186432
开始:600000
结束:650000
轮次:14
行:136432
开始:650000
结束:700000
轮次:15
行:86432
开始:700000
结束:750000
轮次:16
行:36432
开始:750000
结束:800000

4

1 回答 1

1

看起来 $end 不是全局偏移量,只是要获取的记录数(从 $start 开始的偏移量)。尝试将 $end 始终设置为 50000 并且仅更改 $start。

于 2011-06-01T02:11:30.787 回答