2012-01-19 39 views
0

我正在嘗試找到一種方法來優化SQL-Server 2008 R2數據庫中兩個SHA1值之間的比較。這些數據庫中當前有40個字符的十六進制值,存儲爲char(40)。這些值被編入索引。 「已知值」列表由21082054個唯一條目組成。這將用於比較數據集的大小,從十幾到十億的條目。通過將字符串比較更改爲5個int字段或3個bigint字段來優化字符串?

作爲一名軟件開發人員,我明白40個字符的字符串比較是將40個單獨的值與一個早期的選項(只要它們不同,比較結束)進行比較。所以下一個改變嘗試改進這個邏輯步驟似乎是將十六進制值轉換爲包含整數值。這給我留下了5個32位整數或3個64位整數,int和long分別適用於大多數語言。

我不確定這種思維方式如何轉化爲SQL-Server 2008環境。目前,SHA1是表格的主鍵。爲了對數據保持相同的要求,我必須使主鍵5或3分開字段,在所有這些字段上構建索引,然後將這些更改從已知長度表複製到未知長度表。

TL; DR:將40個字符的十六進制字符串更改爲單獨的整數值字段會提高比較/查找速度執行嗎?

+0

在測試數據塊上運行它,看看是否可以測量速度差。 – cdeszaq

+0

@cdeszaq這將最終發生,只是有一個目前更高的優先級的東西不起作用,這是因爲擔心執行速度。 – James

+0

原諒我。我通常不會提出語法問題,但「由...組成」影響我像黑板上的指甲。它應該是「包含」或「由...組成」:-) –

回答

1

我懷疑你不得不在意這一點。

40個字符的字符串比較不會比較所有40個字符,除非前39個字符相同。

幾乎所有的時間都會在1個字符後停止。 大部分剩餘時間在2之後停止。

+0

有關如何改進這種比較的偶然建議? – James

+0

@詹姆斯:作爲一項規則,我不會將注意力集中在某些事情上,而事實上卻不知道它佔了足夠多的時間來成爲優化的多汁目標。關於SQL我通常保持安靜,但技術* [這裏解釋](https://sourceforge.net/projects/randompausedemo/)*可以適應它。 –