При количестве 1млн из 1мл допустимых значений ни какой рандомности не может быть. Думайте как выдавать вообще не используя таблицу.
Первое что пришло в голову мне, это использовать мемкеш для хранение уже выданных id.
$rand = rand(1, 1000000);
$memkey =«ticket_».$rand;
if ($get_result = $memcache->get($memkey))
{
Такой билет уже продан, генерим другой
}
{
Билет не продан. Записываем в БД и в мемкеш
$memcache->set($memkey, $rand, false);
}