我正在查询两个表之间的连接,请查看以下内容,例如:
您会注意到用于nTransactionId属性的数据类型之间存在差异。
Table_1
Column Name Data Type
______________________________________
nTransactionld numeric(18, O)
sValue varchar(50)
Table_2
Column Name Data Type
______________________________________
nTransactionld bigint
sValue varchar(50)
在“Table_1”表中使用数字(18,0)数据类型,在“Table_2”表中,使用数字(18,0)数据类型。
由于这是可能在外键关系中使用的属性(参见下面的查询,例如),这是否会导致一些性能问题。
SELECT * FROM dbo.Table_1
INNER JOIN dbo.Table_2
ON dbo.Table_1.nTransactionld =dbo.Table_2.nTransactionld
我很感激关于此
的建议答案 0 :(得分:1)
绝对
在几乎所有数据库中,外键需要与它们引用的主键的类型相同。正常的结果是索引不能用于join
。
也就是说,某些数据库可能会在某些情况下进行一些转换。
答案 1 :(得分:0)
NUMERIC
(a.k.a DECIMAL
)的默认声明为18,0,需要9个字节才能存储。 {9}字节的NUMERIC
的最大精度为19,0所以如果你没有声明它,你就会犯一个1位数的错误。
Bigint
适用于近19位数字... 9,223,372,036,854,775,807,只需要8个字节。
DECIMAL
所需的额外字节是确定小数点的位置。由于您无法在IDENTITY
列中使用小数点,我想我会选择BIGINT
。
因此,Gordon建议匹配主键和外键的数据类型是有意义的。