|
據(jù)庫(kù)中使用自增量字段與Guid字段主鍵的性能對(duì)比
1.概述:
在我們的數(shù)據(jù)庫(kù)設(shè)計(jì)中,數(shù)據(jù)庫(kù)的主鍵是必不可少的,主鍵的設(shè)計(jì)對(duì)整個(gè)數(shù)據(jù)庫(kù)的設(shè)計(jì)影響很大.我就對(duì)自動(dòng)增量字段與Guid字段的性能作一下對(duì)比,歡迎大家討論.
2.簡(jiǎn)介:
1.自增量字段
自增量字段每次都會(huì)按順序遞增,可以保證在一個(gè)表里的主鍵不重復(fù)。除非超出了自增字段類型的最大值并從頭遞增,但這幾乎不可能。使用自增量字段來(lái)做主鍵是非常簡(jiǎn)單的,一般只需在建表時(shí)聲明自增屬性即可。
自增量的值都是需要在系統(tǒng)中維護(hù)一個(gè)全局的數(shù)據(jù)值,每次插入數(shù)據(jù)時(shí)即對(duì)此次值進(jìn)行增量取值。當(dāng)在當(dāng)量產(chǎn)生唯一標(biāo)識(shí)的并發(fā)環(huán)境中,每次的增量取值都必須最此全局值加鎖解鎖以保證增量的唯一性。這可能是一個(gè)并發(fā)的瓶頸,會(huì)牽扯一些性能問(wèn)題。
在數(shù)據(jù)庫(kù)遷移或者導(dǎo)入數(shù)據(jù)的時(shí)候自增量字段有可能會(huì)出現(xiàn)重復(fù),這無(wú)疑是一場(chǎng)惡夢(mèng)(本人已經(jīng)深受其害).
如果要搞分布式數(shù)據(jù)庫(kù)的話,這自增量字段就有問(wèn)題了。因?yàn)椋诜植际綌?shù)據(jù)庫(kù)中,不同數(shù)據(jù)庫(kù)的同名的表可能需要進(jìn)行同步復(fù)制。一個(gè)數(shù)據(jù)庫(kù)表的自增量值,就很可能與另一數(shù)據(jù)庫(kù)相同表的自增量值重復(fù)了。
2.uniqueidentifier(Guid)字段
在MS Sql 數(shù)據(jù)庫(kù)中可以在建立表結(jié)構(gòu)是指定字段類型為uniqueidentifier,并且其默認(rèn)值可以使用NewID()來(lái)生成唯一的Guid(全局唯一標(biāo)識(shí)符).使用NewID生成的比較隨機(jī),如果是SQL 2005可以使用NewSequentialid()來(lái)順序生成,在此為了兼顧使用SQL 2000使用了NewID().
Guid:指在一臺(tái)機(jī)器上生成的數(shù)字,它保證對(duì)在同一時(shí)空中的所有機(jī)器都是唯一的,其算法是通過(guò)以太網(wǎng)卡地址、納秒級(jí)時(shí)間、芯片ID碼和許多可能的數(shù)字生成。其格式為:04755396-9A29-4B8C-A38D-00042C1B9028.
Guid的優(yōu)點(diǎn)就是生成的id比較唯一,不管是導(dǎo)出數(shù)據(jù)還是做分步開(kāi)發(fā)都不會(huì)出現(xiàn)問(wèn)題.然而它生成的id比較長(zhǎng),占用的數(shù)據(jù)庫(kù)空間也比較多,隨著外存價(jià)格的下降,這個(gè)也無(wú)需考慮.另外Guid不便于記憶,在這方面不如自動(dòng)增量字段,在作調(diào)試程序的時(shí)候不太方便。
3.測(cè)試:
1.測(cè)試環(huán)境
操作系統(tǒng):windows server 2003 R2 Enterprise Edition Service Pack 2
數(shù)據(jù)庫(kù):MS SQL 2005
CPU:Intel(R) Pentium(R) 4 CPU 3.40GHz
內(nèi)存:DDRⅡ 667 1G
硬盤(pán):WD 80G
2.數(shù)據(jù)庫(kù)腳本






















it知識(shí)庫(kù):數(shù)據(jù)庫(kù)中使用自增量字段與Guid字段作主鍵的性能對(duì)比,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。