資料庫主鍵設定對查詢效率的影響

2021-06-05 13:32:04 字數 1158 閱讀 4939

在資料庫表設計時,許多人為採用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時取一午資料的...