この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 3914|答える: 3

[出典] [MSSQL]SQL SERVERは、主鍵集約インデックステストとしてGUIDと未順序GUIDを順序付けていました

[リンクをコピー]
掲載地 2023/06/08 21:12:26 | | | |
要件:GUIDを主キー集約インデックスとして使用する際は、順序付けられていないGUIDの使用が推奨されます。なぜなら、順序なしのGUIDはスペースの無駄と読み書き効率の低下を引き起こすからです。

復習:

SQL Serverパフォーマンス最適化インデックス断片化
https://www.itsvse.com/thread-9508-1-1.html

[Turn] (MSSQL) SQL Serverデータベースのintおよびguidによるプライマリキー比較
https://www.itsvse.com/thread-10605-1-1.html

データベースGUID値

SQL Serverにおけるグローバル一意識別子(GUID)データ型はデータ型で表されますユニーク識別子16バイトの2進値を格納します。 GUIDは、多くのコンピュータが多拠点に存在するネットワーク内で一意でなければならない識別子としての役割を主な目的とする二進数です。

GuidとSqlGuidの両方に異なるGUID値を比較する方法があります。 SqlGuidの実装はSQL Serverの動作を使用します。値の最後の6バイトが最も重要です

連続GUIDは本質的に推測可能なので、セキュリティに敏感な文脈では使わないでください

参考:ハイパーリンクのログインが見えます。

データベースはGUIDによって順序付けられています

SQL Serverデータベースには1つありますNewSequentialId()関数は順序付けられたGUIDを作成します。 テーブルを作成する際には、GUIDタイプのフィールドのデフォルト値として設定し、新しいデータを挿入する際には主キーの値を自動的に作成できます(この関数はフィールドのデフォルト値としてのみ使用可能で、SQLで直接呼び出すことはできません)。

例:

NewSequentialId()関数はデータベースでのみ使用可能ですが、MicrosoftのMSDNドキュメントではNEWSEQUENTIALIDがWindowsのUuidCreateSequential関数のラッパーであると記載されています。

ヒント:機密保持の問題ならこの機能は使わないでください。 というのは次に生成されるGUIDの値を推測することが可能ですそのGUIDに関連するデータにアクセスするために。

参考:ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。

.NET は順序付けられた GUID を作成します

UuidCreateSequential 関数は、メソッドの計算ハードウェアに依存します最後の12ビットは実際にはネットワークカードのMACアドレスです

コードは以下の通りです:

結果は以下の通りです。



短所:

  • この方法はWindowsライブラリを呼び出すためにDllImportを必要とするため、クロスプラットフォームではありません。
  • 複数のマシンが同じデータベースに書き込みを行うクラスタ環境では使用できません。なぜなら、得られるGUIDが互いに異なり(関数依存の計算ハードウェア)、インデックス断片化が生じるからです。
  • Windowsサーバーが再起動すると、GUIDが低い範囲で開始し、インデックスの断片化が生じる可能性があります。

参考:

ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。

.NETプログラムを使ってSQL SERVER順序付きGUIDを作成する場合は、サードパーティ製クラスライブラリの使用が推奨されます:RT。 櫛、nugetコマンドは以下の通りです:


コードは以下の通りです:

アウトプット:



参考:ハイパーリンクのログインが見えます。

順序付きおよび順序なしのGUIDプライマリキーインデックスフラグメント

まず、以下のスクリプトで2つのテーブルを作成します。

テストは10万件のデータを挿入し、コードは以下の通りです。

検査結果は以下の通りです。

ガイド消費時間(ms)スキャン密度[ベストカウント:実際のカウント]、値が高いほど良い論理スキャン断片化では、値が低いほど良いです平均ページ密度(満ページ)(平均 ページ密度(満載)は値が高いほど良いです
順序なしGUID 1336712.58% [61:485]98.97%63.66%
GUIDの順序 14139100.00% [39:39]0.32%99.61%





テストでは再び100万件のデータが挿入され、順序が違うGUIDは135203 ms、順序付けGUIDは135134 msかかります。 保管スペースの占有状況は以下の通りです:

未順序GUID:36.547 MB
注文GUID:26.609 MB



参考:ハイパーリンクのログインが見えます。


(終わり)




先の:.NET Coreプログラムの多言語読み書きリソースファイル(.resx)
次に:.NET/C# ストリームリードディスクファイルメモリ最適化
 地主| 掲載地 2024/01/27 11:07:12 |
ABPはsqlサーバーデータベース用に順序付けられたGUIDを作成します。ソースコードは以下の通りです:



 地主| 掲載地 2024/03/24 11:43:45 |
EF Coreは順序付けられたGUIDコードを生成します:





ハイパーリンクのログインが見えます。

 地主| 掲載地 2024/04/11 15:00:11 |
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com