0

总之,这是对 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更好吗?bigintsalesitem.item_id

例如:

Select SalesItem.item_id
from SalesItem
left join Item on Item.id = convert(bigint, SalesItem.item_id)

请注意,上面的 sql 只是一个示例。

4

1 回答 1

1

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

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

于 2013-06-28T08:05:20.757 回答