總而言之,對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
是更好的,我轉換爲bigint
salesitem.item_id
?
對於如:
Select SalesItem.item_id
from SalesItem
left join Item on Item.id = convert(bigint, SalesItem.item_id)
請大家注意,上面的SQL只是一個樣本。
我想,這就是你必須像以前一樣嘗試自己,並看到性能問題。您擁有所有必需的表格和足夠的數據來查看差異。就像以前一樣(你改成Varchar)現在改成bigint並看看。並且,考慮關於加入列索引的另一件事。 – 2013-06-28 07:58:04
@ N.p Subedi雅,謝謝你的建議。我測試轉換爲主表是更快的艱難從3分鐘到幾秒 正確的SQL將是[從SalesItem左選擇sales.temm.id左連接項Item.id =轉換(bigint,Salesitem.item_id)],而不是我轉換item.id到varchar(256),它將更快地將salesitem.item_id轉換爲bigint。 – Worgon