php - 生成 11,000,000 个唯一 ID 的最快方法

标签 php mysql scripting

我正在尝试创建 php 脚本,它按顺序生成 11,000,000 百万个唯一 ID。但是,我试图在 20 分钟内非常快地完成它,它应该生成这 1100 万个唯一 ID。此外,一旦它达到 12,000,000,它应该环绕并从零开始。

这是我目前所拥有的。该脚本一次只会返回一个 ID。我只是添加了一个循环来查看生成 ID 需要多长时间。

while(true){

    try {

        $this->getAdapter()->query('INSERT INTO generate_ids (assigned_id) SELECT (MAX(assigned_id)+1) FROM generate_ids');
        $id = $this->getAdapter()->lastInsertId();


        $sql = 'SELECT assigned_id FROM generate_ids WHERE id = $id';  
        $query = $this->getAdapter()->query($sql);
        $result = $query->fetchAll();
            //Live system would return id here
        $assigned_id = $result[0]['assigned_id'];


    } catch (Exception $e) {
        //do nothing
    }

    if($count == 11000000){
        die();
    }

    $count++;
}

最佳答案

如果创建下表:

 CREATE TABLE sequence (
     sequence_id BIGINT NOT NULL AUTO_INCREMENT,
     PRIMARY KEY (`sequence_id`)
) 

然后依次发出这三个查询:

INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() AS sequence;

第三个查询保证返回一个唯一的序列号。即使您有许多不同的客户端程序连接到您的数据库,此保证仍然有效。这就是 AUTO_INCREMENT 的美妙之处。

您可以在需要时使用这些 SQL 查询来获取唯一的序列号,而不仅仅是预先生成一千一百万个这样的序列号。

如果您必须在序列号 1200 万处环绕,您可以改用这些查询。

INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() MOD 12000000 AS sequence;

这里的技巧是使用自动递增的序列号来确保唯一性,但同时删除表中的行,以免占用大量空间。

请注意,您还可以将 LAST_INSERT_ID() 的序列号用于其他目的,例如。

INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
INSERT INTO user (userid, username, phone) 
          VALUES (LAST_INSERT_ID() MOD 12000000, 'Joe', '800-555-1212');
SELECT LAST_INSERT_ID() MOD 12000000 AS sequence;

关于php - 生成 11,000,000 个唯一 ID 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110896/

相关文章:

mysql - AWS RDS 迁移

bash - if 语句中的 grep 命令

linux - 当另一个进程在 Linux 中结束时终止后台进程

php - 在某些时候清空数据库表

mysql - 返回尚未关注(或查看)的最受关注用户

php - Ubuntu 服务器在没有 Apache 的情况下安装 PHP 7

PHP 将电子邮件从数据库加载到数组

c++ - 如何将输入字符串转换为函数()

Javascript onsubmit() 函数不执行任何操作

PHP算法在不同距离的值之间查找