亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Sequential Guid相對于標準Guid的性能提升有哪些?

Sequential Guid相對于標準Guid的性能提升有哪些?

繁星coding 2019-08-16 15:33:50
Sequential Guid相對于標準Guid的性能提升有哪些?當在數據庫中用作主鍵時,有人曾測量過Sequential Guid與Standard Guid的性能嗎?
查看完整描述

3 回答

?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

我可能在這里遺漏了一些東西(如果我愿意,可以隨意糾正我),但我可以看到使用順序GUID / UUID作為主鍵的好處很少。

使用的GUID或UUID的在自動遞增的整數是:

  • 它們可以在任何地方創建而無需聯系數據庫

  • 它們是在您的應用程序中完全唯一的標識符(在UUID的情況下,通用唯一)

  • 給定一個標識符,沒有辦法猜測在暴力之外的下一個或前一個(甚至任何其他有效標識符) - 強制一個巨大的密鑰空間。

不幸的是,使用你的建議,你會失去所有這些東西。

所以,是的。你已經使GUID變得更好了。但是在這個過程中,你幾乎拋棄了幾乎所有使用它們的理由。

如果您真的想提高性能,請使用標準的自動增量整數主鍵。這提供了您所描述的所有好處(以及更多),而幾乎在所有方面都優于“順序指導”。

這很可能會被遺忘,因為它沒有專門回答你的問題(這顯然是精心制作的,所以你可以立即自己回答),但我覺得這是一個更重要的一點。


查看完整回答
反對 回復 2019-08-16
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

正如massimogentilini已經說過的,使用UuidCreateSequential時可以提高性能(在代碼中生成guid時)。但似乎缺少一個事實:SQL Server(至少Microsoft SQL 2005/2008)使用相同的功能,但是:Guids的比較/排序在.NET和SQL Server上有所不同,這仍然會導致更多的IO,因為guid不會被正確訂購。為了生成為sql server(訂購)正確訂購的guid,您必須執行以下操作(請參閱比較詳細信息):

[System.Runtime.InteropServices.DllImport("rpcrt4.dll", SetLastError = true)]static extern int UuidCreateSequential(byte[] buffer);static Guid NewSequentialGuid() {
    byte[] raw = new byte[16];
    if (UuidCreateSequential(raw) != 0)
        throw new System.ComponentModel.Win32Exception(System.Runtime.InteropServices.Marshal.GetLastWin32Error());
    byte[] fix = new byte[16];
    // reverse 0..3
    fix[0x0] = raw[0x3];
    fix[0x1] = raw[0x2];
    fix[0x2] = raw[0x1];
    fix[0x3] = raw[0x0];
    // reverse 4 & 5
    fix[0x4] = raw[0x5];
    fix[0x5] = raw[0x4];
    // reverse 6 & 7
    fix[0x6] = raw[0x7];
    fix[0x7] = raw[0x6];
    // all other are unchanged
    fix[0x8] = raw[0x8];
    fix[0x9] = raw[0x9];
    fix[0xA] = raw[0xA];
    fix[0xB] = raw[0xB];
    fix[0xC] = raw[0xC];
    fix[0xD] = raw[0xD];
    fix[0xE] = raw[0xE];
    fix[0xF] = raw[0xF];
    return new Guid(fix);}

此鏈接此鏈接。


查看完整回答
反對 回復 2019-08-16
  • 3 回答
  • 0 關注
  • 774 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號