One random post from multiple custom post types

This method might work for you. You will have to grab more posts than you need but it is better than doing 9 queries.

$args = array(
    'post_type' => array( 'type1', 'type2', 'type3', 'etc...' ),
    'posts_per_page' => -1
    );

$myquery = new WP_Query( $args );
    $type1 = 0; $type2 = 0; $type3 = 0;  $count = 0;
    while ( $myquery->have_posts() ) : $myquery->the_post();

    if ( $post->post_type == 'type1' ) $type1++; 
    if ( $post->post_type == 'type1' && $type1 > 1 ) continue;

    if ( $post->post_type == 'type2' ) $type2++; 
    if ( $post->post_type == 'type2' && $type2 > 1 ) continue;

    if ( $post->post_type == 'type3' ) $type3++; 
    if ( $post->post_type == 'type3' && $type3 > 1 ) continue;

    // I stopped at 3 but keep going as far as you need.

    $count++; if ( $count > 9 ) continue;

    // Do Stuff

    endwhile;