SQL Server隐式转换为varchar vs bigint

时间:2013-06-28 07:31:11

标签: sql-server performance join implicit-conversion

总之,对varchar而不是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只是一个示例。

1 个答案:

答案 0 :(得分:1)

一般来说,比较两个数字会比比较两个数字更好。

在你的情况下说,当你将SalesItem.item_id转换为bigint时,选择可能会失败,因为它首先存储为varchar,它也可能有一些字符,无法转换为整数。