alternativas para php in_array para matrizes grandes para evitar entradas duplicadas

Eu preciso gerar uma grande lista de números aleatórios de 600k a 2000k, mas a lista não pode ter duplicatas.

Minha atual 'implementação' é assim:

<?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);
?>

Se eu mantiver oin_array&nbsp;teste comentou o tempo de processamento é de cerca de 1 segundo, então omt_rand&nbsp;chamadas e oused&nbsp;O preenchimento de matriz é relativamente "barato", mas quando descomenteço o teste in_array, coisas ruins acontecem! (Eu só estou esperando - tem sido mais de 10 minutos - para o script terminar ...)

Então, estou procurando alternativas no lado de detecção de duplicados ou na parte de geração (como eu poderia gerar números aleatórios sem o risco de obter duplicatas)

Estou aberto a qualquer sugestão.