总而言之,对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