连接ints vs连接chars(或varchars)

时间:2009-02-25 21:50:40

标签: sql join

在SQL上加入char(或varchar)值的表是否存在任何性能缺陷,而不是加入整数值?

5 个答案:

答案 0 :(得分:4)

加入char或var char通常会产生开销,而不是加入int。比较字符时我有两个因素: - 必须考虑整理 - char字段有更多数据要比较*

*(每个字符由8位表示,因此10个char值为80位长,而int为32位)

*(如果使用NCHAR或NVARCHAR,则每个字符为16位)

答案 1 :(得分:2)

有与连接列大小相关的性能注意事项。一个整数是4个字节宽 - 所以任何大于4个字节的char值需要更多的磁盘I / O,缓存空间等。显然,char(5)不会影响太多,但char(4000)会非常浪费。如果使用unicode类型,请将char大小加倍。

通常这个问题出现在自然与代理键的背景下。在该参数中,数据类型的大小不是唯一的因素 - 因为您经常可以避免使用自然(char)键进行连接。

当然,任何人都不可能成为你申请的瓶颈 - 所以设计不受惩罚(至少在这方面)。

答案 2 :(得分:1)

没有(在Oracle中)。可以产生影响的是:
- 如果join-condition中的数据类型不同(隐式转换可能会降低性能)。因此将char加入varchar可能很糟糕 - 如果一个字段有索引而另一个字段没有索引 - 如果一列中的数据比另一列中的数据长得多。

答案 3 :(得分:1)

char或varchar将根据您的字符集存储为ASCII或unicode。 int将存储为某种打包形式。如果以int形式取一个数字,它将小于字符(字符串)形式中的相同数字。存储为数字类型总是比存储为字符更高效。

答案 4 :(得分:0)

不,只要您加入的表之间的数据类型相同,就可以了。