SQL Server连接到不同的数据类型性能

SQL Server连接到不同的数据类型性能,sql,sql-server,Sql,Sql Server,我得到了一个名为customers的表,其中pk是int 将此字段连接到字段为BIGINT的表时是否存在性能问题,当我说连接时,我指的是内部连接 我知道这是一个糟糕的做法,有不同的类型,但这不是我的项目 谢谢听起来您对此无能为力(除了将数据复制到具有匹配数据类型的表中),所以我不确定该说什么。它会对性能产生影响,但可能不会像从varchar或double转换那样糟糕 如果您的主键是int,这意味着它是一个外键bigint,那么bigint不应该包含int范围之外的任何内容,因此将bigint向下

我得到了一个名为customers的表,其中pk是int

将此字段连接到字段为BIGINT的表时是否存在性能问题,当我说连接时,我指的是内部连接

我知道这是一个糟糕的做法,有不同的类型,但这不是我的项目


谢谢

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

如果您的主键是int,这意味着它是一个外键bigint,那么bigint不应该包含int范围之外的任何内容,因此将bigint向下转换为int(而不是从int向上转换为bigint)的选项永远不会产生问题


此外,根据您的查询及其执行计划,性能影响可能会最小化,具体取决于连接方向、内部或外部连接、基数/统计、可用的索引等。

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


然而,我的直觉是在转换类型时会有一些开销。因此,也许您也可以通过另一种方式模拟这种情况,分析一个已知的系统(比如说PK int to int),然后在join子句中插入一个显式转换(比如说PK int to int cast as bigint),看看会发生什么

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

请参阅以下链接-


是的。您将根据规则获得隐式加宽转换

int列中的任何索引都很可能被忽略。考虑到这是PK,它的表现可能会非常糟糕。如果显式强制转换也同样适用

不幸的是,这些选项要么是修复设计,要么是添加一个计算过的索引列,这样它就是bigint-JOIN-bigint。如果无法更改该表,则运行该表并查看:如果您有几个100或1000行,那么您就可以了。如果它是数百万,你就是技术上所说的博莱克斯