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

SQL Server 2005 - ID 列の代わりに生成されたシーケンスを使用していますか?

    はい、SQL 11 には SEQUENCE オブジェクトがあります。 をご覧ください。 SQL Server v.Next (デナリ) :SEQUENCE の使用 .

    手動シーケンスの作成は可能ですが、お勧めしません。シーケンス ジェネレーターを実行する秘訣は、シーケンス テーブルで UPDATE WITH OUTPUT を使用することです。擬似コードは次のとおりです:

    CREATE TABLE Sequences (
        Name sysname not null primary key, 
        Sequence bigint not null default 0);
    GO
    
    CREATE PROCEDURE sp_getSequence
        @name sysname,
        @value bigint output
    AS
        UPDATE Sequences
        SET Sequence = Sequence + 1
         OUTPUT @value = INSERTED.Sequence
        WHERE Name = @name;
    GO
    

    詳細は省きましたが、これが一般的な考え方です。ただし、大きな問題があります。シーケンスの次の値を要求するトランザクションはすべてロックします。 これは、シーケンス値に更新ロックがかかるためです。つまり、すべて トランザクションは、値を挿入するときに相互にシリアル化する必要があり、その結果生じるパフォーマンスの低下は、実際の運用展開では耐えられません。

    IDENTITY 型に固執していただきたいと思います。完璧ではありませんが、自分で達成できるものよりもはるかに優れています。



    1. hibernate 5 + ZonedDateTime+postgresqlにはタイムゾーンとオフセットが含まれます

    2. nullの数が少ないものからnullがないものまでの列を使用して行を並べ替えます

    3. PHP OCI、Oracle、およびデフォルトの数値形式

    4. PHPアレイをMySQLに保存しますか?