# Sling less for speed

- ## while(@row = $sth->fetchrow_array) { }

  - one column: 51,155 fetches per second
  - 20 columns: 24,032 fetches per second

##

- ## while($row = $sth->fetchrow_arrayref) { }

  - one column: 58,653 fetches per second - approximately 12% faster
  - 20 columns: 49,390 fetches per second - approximately 51% faster

##

- ## while($row = shift(@$rowcache) || shift(@{$rowcache=$sth->fetchall_arrayref(undef, $max_rows)})) { }

  - one column: 348,140 fetches per second - by far the fastest!
  - 20 columns: 42,128 fetches per second - now slower than fetchrow_arrayref!
  - Why? Balance time saved making fewer calls with time spent managing more memory
  - Do your own benchmarks to find what works best for your situations

##

- ## Notes:

  - Tests used DBD::mysql on 100,000 rows with fields 9 chars each. $max_rows=1000;
  - Time spent inside fetchrow_* method is approximately 0.000011s (~90,000 per second)

Previous slide | Next slide | Back to first slide | View graphic version