我正在处理一个非常大的数据集(准确地说是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
Round: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
答案 0 :(得分:1)
看起来$ end不是全局偏移量,只是要获取的记录数(偏离$ start)。尝试将$ end设置为50000并仅更改$ start。