SQL Server加入不同的数据类型性能

时间:2010-11-09 16:34:54

标签: sql sql-server

我有一个名为customers的表,其中pk是一个int。

将这个字段加入BIGINT的表是否有任何性能问题或问题,当我说加入时我的意思是内连接。

我知道这是不好的做法,但是不是我的项目。

由于

4 个答案:

答案 0 :(得分:3)

是。根据{{​​3}}规则,您将获得隐式扩展转化。

int列中的任何索引都很可能会被忽略。鉴于这是PK,它可能非常表现不佳。如果你明确地进行CAST也是如此。

不幸的是,选项可以是修复设计,也可以添加一个计算的索引列,因此它是bigint JOIN bigint。如果您无法更改表格,请运行它并查看:如果您有几百或几千行,那么您可能没问题。如果它是数百万,那么你就是技术上称为bollixed的东西。

答案 1 :(得分:2)

我的建议是进行显式转换并使用计算列和索引来解决任何性能问题。计算列只是bigint列值转换为int。

请参阅以下链接 -

http://www.sqlservercentral.com/scripts/T-SQL+Aids/31906/

答案 2 :(得分:1)

听起来你无能为力(除了将数据复制到具有匹配数据类型的表格),所以我不知道该说些什么。它会对性能产生影响,但可能不如从varchar或double转换那么糟糕。

如果你的主键是int并且这是一个外键bigint,那么bigint永远不应该保持int范围之外的任何东西,所以选择将bigint转换为int(而不是从int转发) to bigint)永远不会产生问题。

此外,根据您的查询及其执行计划,性能命中可能会最小化 - 取决于连接方向,内部或外部联接,基数/统计信息,哪些索引可用等等。

答案 3 :(得分:0)

我不知道因为我从未构建过这样的系统!我所能建议的只是克隆表,分析系统,更改数据类型以匹配然后重新分析。

然而我的直觉是转换类型会有一些开销。所以也许你也可以通过分析一个已知系统(比如PK int to int)然后在join子句中插入一个显式的强制转换(比如说int int到int-cast-as-bigint)来模拟这个,看看会发生什么