数据库中使用自增量字段与Guid字段作主键的性能对比(补充篇)-----转
我在發(fā)表過“據(jù)庫中使用自增量字段與Guid字段主鍵的性能對比”這篇文章后,得到博客園各園友的很多評價,大家對我的測試方法也提出一些改進(jìn)的方法。讓我吃驚的是一園友提出:把guid和id的測試順序顛倒一下,看下結(jié)果。今天就再測試一下,歡迎各園友提出更好的測試方案。?????
1.測試環(huán)境
???? 操作系統(tǒng):windows server 2003 R2 Enterprise Edition Service Pack 2
數(shù)據(jù)庫:MS SQL 2008 Express
CPU:Intel(R) Pentium(R) 4 CPU 3.40GHz
內(nèi)存:DDRⅡ 667? 1G
硬盤:WD 80G
2.數(shù)據(jù)庫腳本
CREATE TABLE [dbo].[Table_Guid]([Guid] [uniqueidentifier] NOT NULL CONSTRAINT [DF_Table_Guid_Guid] DEFAULT (newid()),[Value] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,CONSTRAINT [PK_Table_Guid] PRIMARY KEY CLUSTERED ([Guid] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO CREATE TABLE [dbo].[Table_Id]([Id] [int] IDENTITY(1,1) NOT NULL,[Value] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,CONSTRAINT [PK_Table_Id] PRIMARY KEY CLUSTERED ([Id] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO首先看一下測試代碼:
Code
為了消除上面的顧慮,每次僅使用一種方式測試(每次都注釋不使用的代碼)。
1.1.自增Id的寫入測試。
?
1.2.Guid的寫入測試。
2.1.自增Id的讀取到DataTable測試
2.2.Guid的讀取到DataTable測試
3.1.自增Id的數(shù)據(jù)總數(shù)統(tǒng)計
3.2.Guid數(shù)據(jù)總數(shù)統(tǒng)計
4.1.自增Id的數(shù)據(jù)總數(shù)統(tǒng)計(手動找到第3000條數(shù)據(jù)的id,然后查詢)
4.2.Guid的數(shù)據(jù)總數(shù)統(tǒng)計(手動找到第3000條數(shù)據(jù)的id,然后查詢)
以上測試均屬本人電腦上的測試。每次的測試結(jié)果都是測試好幾次,然后才取其中的一組相對平均的結(jié)果。
補充(不是我不總結(jié),其實一些實際的應(yīng)用已經(jīng)在上一篇中總結(jié)過了,再整理一下吧):
????? 1.測試的結(jié)果Guid作為主鍵在以上測試的性能還是優(yōu)于自動增長Id的。對于Inner join的還沒有測試。
????? 2.對于使用那種類型作為主鍵,還要根據(jù)具體的需要。在數(shù)據(jù)庫遷移或者導(dǎo)入數(shù)據(jù)的時候自增量字段有可能會出現(xiàn)重復(fù),這無疑是一場惡夢,而Guid格式無疑是首選。但是,使用Guid格式比較復(fù)雜,對于程序高度比較麻煩,畢竟Guid比較難記。
????? 3.自動增長的Id使用的是int型或者bigint型,它們分別占用存儲空間為4個字節(jié)和8個字節(jié),Guid是uniqueidentifier類型,它占用16個字節(jié)。從存儲空間上來說,自動增長的Id更節(jié)省空間。?????
????? 4.如果要搞分布式數(shù)據(jù)庫的話,這自增量字段就有問題了。因為,在分布式數(shù)據(jù)庫中,不同數(shù)據(jù)庫的同名的表可能需要進(jìn)行同步復(fù)制。一個數(shù)據(jù)庫表的自增量值,就很可能與另一數(shù)據(jù)庫相同表的自增量值重復(fù)了。
????? 我個人還是比較喜歡使用Guid作主鍵,因為它比較唯一,不管是任務(wù)時候它都是唯一的,數(shù)據(jù)庫的導(dǎo)入與導(dǎo)出都不會出現(xiàn)主鍵重復(fù)的現(xiàn)象。
我個人的一些問題:
????? 1.我使用的是windows Live Writer寫的文章,為了粘貼代碼的方便性,我使用from Visual Studio插件粘貼代碼,但是如果代碼中含有中文,例如注釋,粘貼后,每個漢字后面都會多出一個“?”,這個問題不知道怎么解決,我通過設(shè)置編碼方式還 是不能解決問題。
????? 2.在Windows Live Writer中怎樣設(shè)置代碼(打包后上傳后)的下載的鏈接。
????? 另外:向喜歡數(shù)據(jù)庫的園友,推薦一篇:SQL Server 查詢處理中的各個階段
????? 關(guān)于自動增長Id與Guid的介紹請參見:據(jù)庫中使用自增量字段與Guid字段主鍵的性能對比
????? 測試代碼
總結(jié)
以上是生活随笔為你收集整理的数据库中使用自增量字段与Guid字段作主键的性能对比(补充篇)-----转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 瞧瞧UC浏览器对CSS样式的“关怀”
- 下一篇: 你们还留恋windows什么呢?