|
UNIQUEIDENTIFIER做主鍵(Primary Key)是一件很方便的事情,在數(shù)據(jù)合并等操作中有不可替代的優(yōu)勢(shì)
但是由于普通的GUID的分散性使得如果主鍵加上聚集索引(Clustered Index)會(huì)導(dǎo)致在插入記錄時(shí)效率大大降低
SQL SERVER 2005中新增了一個(gè)NEWSEQUENTIALID的函數(shù),MSDN的解釋是:
在指定計(jì)算機(jī)上創(chuàng)建大于先前通過(guò)該函數(shù)生成的任何 GUID 的 GUID。
NEWSEQUENTIALID() 不能在查詢中引用。
注:即只能做為數(shù)據(jù)庫(kù)列的DEFAULT VALUE,不能執(zhí)行類似SELECT NEWSEQUENTIALID()的語(yǔ)句
只有當(dāng)計(jì)算機(jī)沒(méi)有網(wǎng)卡時(shí),NEWSEQUENTIALID() 生成的 GUID 才在該特定計(jì)算機(jī)中是唯一的。
注:這句話是錯(cuò)誤的,應(yīng)該是只有只有當(dāng)計(jì)算機(jī)有網(wǎng)卡時(shí),生成的GUID才是全球唯一
您可以使用 NEWSEQUENTIALID() 生成 GUID 以減少葉級(jí)別索引上的頁(yè)爭(zhēng)用。
但是使用NEWSEQUENTIALID卻不是那么一帆風(fēng)順
1. 如何獲得生成的GUID
如果生成的GUID所在字段做為外鍵要被其他表使用,我們就需要得到這個(gè)生成的值
通常,PK是一個(gè)IDENTITY字段,我們可以在INSERT之后執(zhí)行 SELECT SCOPE_IDENTITY()來(lái)獲得新生成的ID
但是由于NEWSEQUENTIALID()不是一個(gè)INDETITY類型,這個(gè)辦法是做不到了,而他本身又只能在默認(rèn)值中使用,不可以事先SELECT好再插入,那么我們?nèi)绾蔚玫侥兀坑幸韵聝煞N方法:












it知識(shí)庫(kù):使用NEWSEQUENTIALID解決GUID聚集索引問(wèn)題,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。