sql >> データベース >  >> RDS >> Mysql

11,000,000の一意のIDを生成する最速の方法

    次のテーブルを作成する場合:

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

    次に、次の3つのクエリを次々に発行します。

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

    3番目のクエリは保証です 一意のシーケンス番号を返します。この保証は、データベースに数十の異なるクライアントプログラムが接続されている場合でも当てはまります。それがAUTO_INCREMENTの美しさです。

    これらのシーケンス番号を事前に1100万個生成するだけでなく、これらの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;
    


    1. 画像をC#にロードしてから、MySQLテーブルに挿入します

    2. OracleEBS監査の設定方法

    3. サブクエリからの複数の結果を回避する方法

    4. 行フェッチのOracleサイズを大きく設定すると、アプリの速度が低下しますか?