在資料庫表設計時,許多人為採用int型別還是guid(uniqueidentifyer)作為主鍵爭論不休,有認為int型字段好的,有認為guid好的,很多時候的焦點集中在效率上。
為了弄清事實真相,我想還是要以實驗來進行測試為準。以下就是為了測試插入效率而寫的一段指令碼。測試環境是:xeon 1.6/2g記憶體 win2003/sqlserver2005 企業版。
測試指令碼:
--測試無主鍵/identity/uniqueidentifier/varchar型別主鍵插入表時的效率
create table test3(pkey uniqueidentifier primary key, col int)
declare @now datetime,@i int
set @i=1
set @now=getdate()
while @i<1000000
begin
insert into test3 values (newid(),3)
set @i=@i+1
end
go go
drop table test1
drop table test2
drop table test3
drop table test4
執行測試結果如下:
另外一人提供的資料:
統計:以上是別人提供的資料,經過我的測試(我的機子為2.8ghz,記憶體為1g)資料如下:
以guid作主鍵時:
以int型作主鍵時:
100萬行中再插入10000條資料9360毫秒
查詢時:
declare @starttime datetime
set @starttime=getdate()
select * from test3
select datediff(second,@starttime,getdate())as秒,datediff(ms,@starttime,getdate())as毫秒
查詢所有時(101000000條):
用guid 作主鍵時:
秒 毫秒
130 130876
用int 作主鍵時:
秒 毫秒
141 140626
當查詢一條時,測試不出來,結果均為0毫秒。
影響資料庫查詢效率的因素蒐集
1.watermark 效應。當乙個資料庫執行很長時間 幾個月,幾年 表中的記錄被反覆的修改和刪除後,大量的磁碟空間沒有被 外在的表現就是表占用的空間越來越大,當需要執行全表掃瞄的查詢時,出現查詢緩慢的症狀。2.blob,clob欄位的濫用。兩個表,乙個有lob型別的列,乙個沒有,其中記錄的條數都一...
索引對查詢效率的影響
我們將利用advanturewords2008r2中的sales.salesorderdetail表,其中有12萬條資料,非常適合用於測試。不過我們不直接在這張表上做測試,因為這張表上已經有索引了。我們需要新建一張表,將該表中的資料匯入我們新建的test和test2表。test和test2的建立方法...
資料庫的規模對select語句的效率影響有多大?
今天跟同學為了乙個問題爭了好久,現在越來越能夠享受爭論的樂趣了,不會像以前一樣帶入太多的個人情緒,更能夠客觀的看待問題本身了。他的觀點是當乙個資料庫規模不斷增大時,查詢同樣條數的select語句查詢的效率會越來越低,舉個例子 乙個資料庫總共有1w資料時取一千資料跟資料庫總用有1000w時取一午資料的...