数据库中使用自增量字段与Guid字段作主键的性能对比(补充篇)-----转
我在發表過“據庫中使用自增量字段與Guid字段主鍵的性能對比”這篇文章后,得到博客園各園友的很多評價,大家對我的測試方法也提出一些改進的方法。讓我吃驚的是一園友提出:把guid和id的測試順序顛倒一下,看下結果。今天就再測試一下,歡迎各園友提出更好的測試方案。?????
1.測試環境
???? 操作系統:windows server 2003 R2 Enterprise Edition Service Pack 2
數據庫:MS SQL 2008 Express
CPU:Intel(R) Pentium(R) 4 CPU 3.40GHz
內存:DDRⅡ 667? 1G
硬盤:WD 80G
2.數據庫腳本
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的數據總數統計
3.2.Guid數據總數統計
4.1.自增Id的數據總數統計(手動找到第3000條數據的id,然后查詢)
4.2.Guid的數據總數統計(手動找到第3000條數據的id,然后查詢)
以上測試均屬本人電腦上的測試。每次的測試結果都是測試好幾次,然后才取其中的一組相對平均的結果。
補充(不是我不總結,其實一些實際的應用已經在上一篇中總結過了,再整理一下吧):
????? 1.測試的結果Guid作為主鍵在以上測試的性能還是優于自動增長Id的。對于Inner join的還沒有測試。
????? 2.對于使用那種類型作為主鍵,還要根據具體的需要。在數據庫遷移或者導入數據的時候自增量字段有可能會出現重復,這無疑是一場惡夢,而Guid格式無疑是首選。但是,使用Guid格式比較復雜,對于程序高度比較麻煩,畢竟Guid比較難記。
????? 3.自動增長的Id使用的是int型或者bigint型,它們分別占用存儲空間為4個字節和8個字節,Guid是uniqueidentifier類型,它占用16個字節。從存儲空間上來說,自動增長的Id更節省空間。?????
????? 4.如果要搞分布式數據庫的話,這自增量字段就有問題了。因為,在分布式數據庫中,不同數據庫的同名的表可能需要進行同步復制。一個數據庫表的自增量值,就很可能與另一數據庫相同表的自增量值重復了。
????? 我個人還是比較喜歡使用Guid作主鍵,因為它比較唯一,不管是任務時候它都是唯一的,數據庫的導入與導出都不會出現主鍵重復的現象。
我個人的一些問題:
????? 1.我使用的是windows Live Writer寫的文章,為了粘貼代碼的方便性,我使用from Visual Studio插件粘貼代碼,但是如果代碼中含有中文,例如注釋,粘貼后,每個漢字后面都會多出一個“?”,這個問題不知道怎么解決,我通過設置編碼方式還 是不能解決問題。
????? 2.在Windows Live Writer中怎樣設置代碼(打包后上傳后)的下載的鏈接。
????? 另外:向喜歡數據庫的園友,推薦一篇:SQL Server 查詢處理中的各個階段
????? 關于自動增長Id與Guid的介紹請參見:據庫中使用自增量字段與Guid字段主鍵的性能對比
????? 測試代碼
總結
以上是生活随笔為你收集整理的数据库中使用自增量字段与Guid字段作主键的性能对比(补充篇)-----转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 瞧瞧UC浏览器对CSS样式的“关怀”
- 下一篇: MYSQL AB复制原理