总之,这是对 varchar 而不是 bigint 的稍微性能改进。
例如,我有一个像这样的两个表,如下所示
物品
ID bigint PK;
item_code varchar(256);
销售项目
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)
on而是转换为onitem.id
更好吗?bigint
salesitem.item_id
例如:
Select SalesItem.item_id
from SalesItem
left join Item on Item.id = convert(bigint, SalesItem.item_id)
请注意,上面的 sql 只是一个示例。