【发布时间】:2016-10-14 13:21:18
【问题描述】:
我有两个表需要通过链接服务器加入,但我现在遇到的源数据有问题。
我需要加入的列名分别是account_number 和member_number。
我的问题是 account_number 是 varchar(10) 并且总是用前导零填充,但 member_number 是 varchar(12) (不要问为什么,最后两个从未使用过)但没有填充带前导零。
如果我们说account_number在A中,member_number在B中,我想出了以下解决方案:
SELECT * FROM
A INNER JOIN B
ON CAST(A.account_number AS BIGINT) = CAST(B.member_number AS BIGINT)
和
SELECT * FROM
A INNER JOIN B
ON A.account_number = RIGHT('0000000000'+B.member_number, 10)
问题是它们超级慢!
这一定是函数强制进行表扫描的事实,但我不知道还能做些什么。有什么方法可以更快地进行这种比较?也许有like 的一些变化或什么?
【问题讨论】:
-
您是否考虑过访问远程服务器上的统计信息的权限不足?什么版本的 SQL Server?
-
@MitchWheat 这是 SQL Server 2012
-
@MitchWheat SP3。体验缓慢的不只是我。实际上是运行查询的数据库管理员向我抱怨。
标签: sql tsql optimization indexing query-optimization