Question: The normal `result()` method described in the documentation appears to load all records immediately. My application needs to load about 30,000 rows, and one at a time, submit them to a third-party search index API. Obviously loading everything into memory at once doesn't work well (errors out because of too much memory).

So my question is, how can I achieve the effect of the conventional MySQLi API method, in which you load one row at a time in a loop?

Answer: 
For those who want to save memory on large result-set:

Since **CodeIgniter 3.0.0**,
There is a `unbuffered_row` function,

> 
> All the methods above will load the whole result into memory (prefetching). Use unbuffered\_row() for processing large result sets.
> 
> 
> 

> 
> This method returns a single result row without prefetching the whole result in memory as row() does. If your query has more than one row, it returns the current row and moves the internal data pointer ahead.
> 
> 
> 

```
$query = $this->db->query("YOUR QUERY");

while ($row = $query->unbuffered_row())
{
    echo $row->title;
    echo $row->name;
    echo $row->body;
}

```

> 
> You can optionally pass ‘object’ (default) or ‘array’ in order to specify the returned value’s type:
> 
> 
> 

```
$query->unbuffered_row();               // object
$query->unbuffered_row('object');       // object
$query->unbuffered_row('array');        // associative array

```

Official Document: <https://www.codeigniter.com/userguide3/database/results.html#id2>
Well, there'se the **[row()](http://ellislab.com/codeigniter/user-guide/database/results.html)** method, which returns just one row as an object, or the **row\_array()** method, which does the same but returns an array (of course).

So you could do something like

```
$sql = "SELECT * FROM yourtable";
$resultSet = $this->db->query($sql);
$total = $resultSet->num_rows();

for($i=0;$i<$total;$i++) {
  $row = $resultSet->row_array($i);
}

```

This fetches in a loop each row from the whole result set.  

Which is about the same as fetching everyting and looping over the `$this->db->query($sql)->result()` method calls I believe. 

If you want a row at a time either you make 30.000 calls, or you select all the results and fetch them one at a time or you fetch all and walk over the array. I can't see any way out now.