SQL-列数据类型差异和性能影响

时间:2014-01-21 13:28:31

标签: sql performance

我正在查询两个表之间的连接,请查看以下内容,例如:

您会注意到用于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

我很感激关于此

的建议

2 个答案:

答案 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建议匹配主键和外键的数据类型是有意义的。