我有一個q-grams(2個字母的字符串)表。我需要在CHAR(2)字段中加入另一個表。SQL Server VARCHAR(2)加入性能與INT
將這些2-gram轉換爲數字(例如aa = 1,ab = 2,ac = 3)並將此表和引用表中的字段轉換爲INT並使用INT寧可?
親切的問候
彼得
我有一個q-grams(2個字母的字符串)表。我需要在CHAR(2)字段中加入另一個表。SQL Server VARCHAR(2)加入性能與INT
將這些2-gram轉換爲數字(例如aa = 1,ab = 2,ac = 3)並將此表和引用表中的字段轉換爲INT並使用INT寧可?
親切的問候
彼得
大概不會。如果是的話,最好使用smallint而不是int。另外,我不確定有沒有varchar(2)列的意義。使用varchar列有額外的開銷,並且最多隻保存一個字節。
你會有多少行數據?
否,這可能不會更高性能,此外,你將不得不有一個額外的表來存儲這些映射。
這將是一個額外的JOIN以及。
請記住爲您的連接列應用正確的索引。
我的意思是用INT列替換CHAR(2)列,所以不需要映射表。 – Peter 2009-12-18 13:16:03
不,我仍然認爲你不需要改變它。 – 2009-12-18 13:26:31
根據我的經驗,將字符串(特別是CHAR(2))中的一個連接的鍵更改爲INT不會產生可測量的差異。這是因爲你的大部分開銷是I/O而不是CPU。
一旦進入更長的字符串(特別是Unicode字符串),您可以開始測量差異。但即使如此,由於數據和索引中的記錄大小,我認爲這還與增加I/O有關。
我在說一張有300萬行與大約1億5千萬q-克相關的表格。所以一個大的數據集。 - 彼得0秒前 – Peter 2009-12-18 13:13:32
蘭迪,我犯了一個錯誤 - 它是一個CHAR(2)而不是一個VARCHAR(2) – Peter 2009-12-18 13:15:08