2009-12-18 78 views
0

我有一個q-grams(2個字母的字符串)表。我需要在CHAR(2)字段中加入另一個表。SQL Server VARCHAR(2)加入性能與INT

將這些2-gram轉換爲數字(例如aa = 1,ab = 2,ac = 3)並將此表和引用表中的字段轉換爲INT並使用INT寧可?

親切的問候

彼得

回答

1

大概不會。如果是的話,最好使用smallint而不是int。另外,我不確定有沒有varchar(2)列的意義。使用varchar列有額外的開銷,並且最多隻保存一個字節。

你會有多少行數據?

+0

我在說一張有300萬行與大約1億5千萬q-克相關的表格。所以一個大的數據集。 - 彼得0秒前 – Peter 2009-12-18 13:13:32

+0

蘭迪,我犯了一個錯誤 - 它是一個CHAR(2)而不是一個VARCHAR(2) – Peter 2009-12-18 13:15:08

1

,這可能不會更高性能,此外,你將不得不有一個額外的表來存儲這些映射。

這將是一個額外的JOIN以及。

請記住爲您的連接列應用正確的索引。

+0

我的意思是用INT列替換CHAR(2)列,所以不需要映射表。 – Peter 2009-12-18 13:16:03

+0

不,我仍然認爲你不需要改變它。 – 2009-12-18 13:26:31

0

這是你的瓶頸嗎?這會增加額外的複雜性嗎?

這就是說,你不妨將它做成CHAR(2)

+0

對不起我的錯誤 - 這是CHAR(2) – Peter 2009-12-18 13:11:39

+0

我在說一張有300萬行與大約1億5千萬q-grams相關的表格。所以一個大的數據集。 – Peter 2009-12-18 13:12:45

0

根據我的經驗,將字符串(特別是CHAR(2))中的一個連接的鍵更改爲INT不會產生可測量的差異。這是因爲你的大部分開銷是I/O而不是CPU。

一旦進入更長的字符串(特別是Unicode字符串),您可以開始測量差異。但即使如此,由於數據和索引中的記錄大小,我認爲這還與增加I/O有關。