2013-06-28 119 views
0

總而言之,對varchar而不是bigint的性能略有改善。SQL Server隱式轉換爲varchar vs bigint

例如,我有兩個表像這樣如下

項目

ID bigint PK; 
item_code varchar(256); 

SalesItem

ID bigint PK; 
item_id varchar(256); 

請大家注意,item_id不是一個外鍵並由於某些特殊情況item_id被允許是varchar(256);

我試過SQL語句這樣

Select SalesItem.item_id 
from SalesItem 
left join Item on SalesItem.item_id = Item.id 

這會導致SQL Server正在試圖VARCHAR轉換成int值隱式轉換,性能最差。

不知怎的,我們改變了SQL到下面:

Select SalesItem.item_id 
from SalesItem 
left join Item on SalesItem.item_id = convert(varchar(256), Item.id) 

好表現突出,近70%-80%

只是珍玩下降大約是在序列 'ON' 事?我應該把它轉換成什麼?

而不是我轉換爲varchar(256)item.id是更好的,我轉換爲bigintsalesitem.item_id

對於如:

Select SalesItem.item_id 
from SalesItem 
left join Item on Item.id = convert(bigint, SalesItem.item_id) 

請大家注意,上面的SQL只是一個樣本。

+0

我想,這就是你必須像以前一樣嘗試自己,並看到性能問題。您擁有所有必需的表格和足夠的數據來查看差異。就像以前一樣(你改成Varchar)現在改成bigint並看看。並且,考慮關於加入列索引的另一件事。 – 2013-06-28 07:58:04

+0

@ N.p Subedi雅,謝謝你的建議。我測試轉換爲主表是更快的艱難從3分鐘到幾秒 正確的SQL將是[從SalesItem左選擇sales.temm.id左連接項Item.id =轉換(bigint,Salesitem.item_id)],而不是我轉換item.id到varchar(256),它將更快地將salesitem.item_id轉換爲bigint。 – Worgon

回答

1

通常比較兩個數字會比比較兩個字符串做得更好。

說到你的情況,當將SalesItem.item_id轉換爲bigint時,select可能會失敗,因爲它首先存儲爲varchar,它也可能有一些字符,無法轉換爲整數。

+0

經過測試,如果我將其轉換爲大整數,速度肯定會更快。 – Worgon