首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 產生 GUID (Globally Unique Identifier):Guid.NewGuid()、資料庫主鍵應用與 SQL Server NEWID() 對比

     編輯:關於ASP.NET

GUID (Globally Unique Identifier) 為 128 位元整數 (16 位元組),標準格式 936DA01F-9ABD-4d9d-80C7-02AF85C822A8,極低機率重複,適合分散式系統唯一識別碼。

.NET 核心 API

// 產生新 GUID
Guid g = Guid.NewGuid();
string s = g.ToString();        // "936DA01F-9ABD-4d9d-80C7-02AF85C822A8"
string n = g.ToString("N");     // "936da01f9abd4d9d80c702af85c822a8" (無連字號)
string d = g.ToString("D");     // 預設格式
string b = g.ToString("B");     // "{936DA01F-9ABD-4d9d-80C7-02AF85C822A8}"
string p = g.ToString("P");     // "(936DA01F-9ABD-4d9d-80C7-02AF85C822A8)"

// 解析字串
Guid g2 = Guid.Parse("936DA01F-9ABD-4d9d-80C7-02AF85C822A8");
bool ok = Guid.TryParse(input, out Guid g3);

完整主控台範例

using System;
namespace DisplayGUID
{
    class GuidExample
    {
        static void Main(string[] args)
        {
            GenerateGUID();
        }
        static void GenerateGUID()
        {
            Console.WriteLine("GUID: " + Guid.NewGuid().ToString());
        }
    }
}

資料庫主鍵應用策略

策略優點缺點適用場景
Client 端 Guid.NewGuid()無需往返 DB、離線可用、分散式唯一索引碎片化、儲存空間大 (16 bytes vs 4/8 bytes)離線 APP、多主庫同步、合併複寫
SQL Server NEWID()DB 端產生、預設值 DEFAULT NEWID()同樣索引碎片、需往返取回值純 DB 操作、Stored Procedure 內部
SQL Server NEWSEQUENTIALID()有序 GUID、大幅減少索引碎片可預測性略高、僅可作 DEFAULT高寫入量 OLTP 系統、叢集索引主鍵
COMB GUID (有序前綴 + 隨機後綴)兼顧順序與唯一、客戶端可產生需自行實作NHibernate/EF Core 內建支援、高效能寫入

效能優化關鍵:叢集索引與 GUID

  • 若 GUID 為叢集索引 (PK 預設),隨機 GUID 導致嚴重頁面分裂與碎片。
  • 解決:
    1. 改用 NEWSEQUENTIALID() 或 COMB GUID。
    2. 或:PK 用 BIGINT IDENTITY,GUID 另建 非叢集唯一索引。
    3. 定期 ALTER INDEX ... REBUILD 整理碎片。

安全性提醒

GUID 不可作為安全 Token** (可預測、無簽章)。API Token、密碼重設連結請使用 System.Security.Cryptography.RandomNumberGenerator 產生 256-bit 隨機字串並簽署 (JWT/HMAC)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved