alternativas a php in_array para arreglos grandes para evitar entradas duplicadas

Necesito generar una lista grande de números aleatorios de 600k a 2000k, pero la lista no puede tener duplicados.

Mi 'implementación' actual se ve así:

<?php
    header('Content-type: text/plain');
    $startTime = microtime(true);
    $used = array();
    for ($i=0; $i < 600000; ) { 
        $random = mt_rand();
        //if (!in_array($random, $used)) {
        $used[] = $random;
        $i++;
        //}
    }
    $endTime = microtime(true);
    $runningTime = $endTime - $startTime;
    echo 'Running Time: ' . $runningTime;
    //print_r($used);
?>

Si guardo elin_array La prueba comentó que el tiempo de procesamiento es de alrededor de 1 segundo, por lo quemt_rand llamadas y elused el relleno de matrices es relativamente 'barato', pero cuando descomprimo la prueba de in_array, ¡suceden cosas malas! (Estoy esperando, han pasado más de 10 minutos, a que termine el script ...)

Así que estoy buscando alternativas ya sea en el lado de detección de duplicados o en la parte de generación (¿Cómo podría generar números aleatorios sin el riesgo de obtener duplicados)

Estoy abierto a cualquier sugerencia.

Respuestas a la pregunta(4)

Su respuesta a la pregunta