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

RowVersionとパフォーマンス

    パフォーマンスへの影響はほとんどありません。rowversionは古いタイムスタンプデータ型の新しい名前にすぎません。したがって、データベースには追加のバイナリフィールドを格納する必要があります。次のようなこのデータに対してクエリを実行しようとすると、パフォーマンスが大幅に低下します。

    SELECT *
    FROM MyTable
    WHERE rowVersion > @rowVersion
    

    これは、前回の@rowVersion以降に更新されたアイテムのリストを取得するために使用できる一般的な方法です。これは問題なく表示され、たとえば10,000行のテーブルに最適です。しかし、100万行に達すると、常にテーブルスキャンを実行していることがすぐにわかります。パフォーマンスが低下するのは、テーブルがサーバーのRAMに完全に収まらなくなったためです。

    これは、rowVersionで発生する一般的な問題です。 列、それはそれ自体で魔法のように索引付けされていません。また、rowVersion列にインデックスを付ける場合、新しい更新値は常にインデックスの下部にあり、既存のアイテムを更新するとインデックス全体にギャップが残るため、インデックスは時間の経過とともに非常に断片化されることが多いことを受け入れる必要があります。 。

    編集:rowVersionを使用しない場合 更新されたアイテムをチェックするためのフィールド。代わりに、最後に読んだ後でレコードが更新されないようにするために一貫性を保つために使用します。これは完全に許容できる使用法であり、影響はありません。

    UPDATE MyTable SET MyField = ' @myField
    WHERE Key = @key AND rowVersion = @rowVersion
    



    1. MySQLのバックアップと復元を行うための最速の方法

    2. Transact-SQLでの連結

    3. 条件付きリード/ラグ関数PostgreSQL?

    4. initdb:Postgresqlコンテナのディレクトリの権限を変更できませんでした