比较具有不同数据类型的两列的最快方法

时间:2016-06-14 00:56:12

标签: sql tsql optimization indexing query-optimization

我需要通过链接服务器加入两个表,但是我现在遇到的源数据存在问题。

我需要加入的列名分别是account_numbermember_number

我的问题是account_numbervarchar(10)并且始终用前导零填充,但member_numbervarchar(12)(不要问为什么,最后2个从未使用过)但是没有用前导零填充。

如果我们说account_number位于Amember_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的变化?

1 个答案:

答案 0 :(得分:3)

最快的方法是创建一个计算列,使它们具有相同的类型,然后在该列上构建索引。类似的东西:

alter table b add account_number as ( RIGHT('0000000000'+B.member_number, 10) );

create index b_acount_number on b(account_number);

然后将查询运行为:

SELECT *
FROM A INNER JOIN
     B 
     ON A.account_number = b.account_number;

这可能是你能得到的最快的。