我需要通过链接服务器加入两个表,但是我现在遇到的源数据存在问题。
我需要加入的列名分别是account_number
和member_number
。
我的问题是account_number
是varchar(10)
并且始终用前导零填充,但member_number
是varchar(12)
(不要问为什么,最后2个从未使用过)但是没有用前导零填充。
如果我们说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
的变化?
答案 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;
这可能是你能得到的最快的。