3

是否有性能Identity主鍵和正常的主鍵之間的差異?SQL服務器標識主鍵與未標識的性能 - 在使用公式主鍵

其實我想創建一個表,可能有超過500萬行填寫。該表應該在不到半秒的時間內返回過濾條件超過4列的查詢。

由於這些4列(其是從其它表的所有主鍵)都是數字和它們的範圍是有限的,我決定對所有4個列中的主鍵混合。

列範圍可以是例如col1=500 | col2=500 | col3=900,000 | col4=9,000,000bigint範圍9,223,372,036,854,775,807所以如果我想所有4列在bigint主鍵它可以提供它混合。

是否有此解決方案的任何問題嗎?

+0

取決於您如何確定「普通」主鍵新行的ID。見http://www.codeproject.com/Articles/32597/Performance-Comparison-Identity-x-NewId-x-NewSeque – flup

+4

什麼是「正常」主鍵?它是相同的數據類型嗎?它是順序的嗎?它是如何填充的?你的問題就像問「沃爾沃與普通車相比多快?」 –

+0

是與相同的數據類型,e.a與身份和bigint沒有indetity bigint。 – nAviD

回答

0

兩種解決方案都是相同的:

1)一種compsite PK與4列

2)BIGINT柱(無論其身份或不),其是用於PK

SQL服務器機制索引是相同的兩個:數據將排序和保存在一個地方。你可以用這種方式測試這兩種方式:Statistics

SET STATISTICS IO ON 
SET STATISTICS TIME ON 

我測試過它和那些是一樣的。

+0

我需要一段時間才能進行測試,但在測試之後,我會將其標記爲正確答案。 – nAviD

+0

@Navid你應該點擊「答覆CheckBox」標記az答案 – Arian

3

蘸我的腳趾到一些深層次的水域:

約束(如主鍵和外鍵)的影響效力超過性能;這是您的基礎索引的佈局和結構,通常會對給定查詢的執行效果提供更多影響。當然,將PRIMARY KEY約束應用於表格將在該表上構建一個UNIQUE索引,但該索引可能會或可能不會被聚集(取決於創建方式和時間)。

如果PRIMARY KEY作爲IDENTITY列(根據定義單調增加)的聚簇索引構建,那麼您的聚簇鍵將具有最小的由標準INSERT操作產生的碎片;如果您將其構建在其他四列上,並且數據以非單調方式插入,那麼隨着時間的推移,您可能會看到大量的碎片化,這可能會導致性能問題。但是,如果您的數據總是按順序插入,這可能不成問題。

你提到的過濾,但對於加入?