Should work in either MySQL or PostgreSQL. I can't speak to its efficiency, but it's got to be better than ORDER BY RAND().
ORDER BY RAND()
my ( $max ) = $dbh->selectrow_array('SELECT MAX(id) FROM MyTable'); # assuming id is a unique integer key on MyTablemy $rand_id = int(rand($max)) + 1;my @row = $dbh->selectrow_array('SELECT * FROM MyTable WHERE id >= ? LIMIT 1', undef, $rand_id);