我正在处理一个非常大的数据集(准确地说是786432行)。
因此,为了防止内存限制,我想在50000行的数据集上循环,所以为了测试这一点,我想我会尝试:
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
看起来$end不是全局偏移量,只是要获取的记录数(从$start偏移)。尝试将$end始终设置为50000,并且只更改$start。