总之,对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只是一个示例。
答案 0 :(得分:1)
一般来说,比较两个数字会比比较两个数字更好。
在你的情况下说,当你将SalesItem.item_id转换为bigint时,选择可能会失败,因为它首先存储为varchar,它也可能有一些字符,无法转换为整数。