hhh*_*hhh 0 sql-server performance sqlperformance
这是一个性能问题,我希望将两个独立的表中的两列组合在一起.你怎么做组合?
我理解这是or条件
SELECT a.contract1 or b.contract2 from TABLE1 a, TABLE2 b
Run Code Online (Sandbox Code Playgroud)
我的目标是获得一个列,其中每个元素都在Table1的Contract1或Table2的Contract2中.该or符号不重复值等数值进行区分.我需要不同的价值观.由于底层不同,所提出的解决方案union方法对于大量数据集而言行动缓慢.
请提出有效的方法来处理性能.
输入
表A中的列
Run Code Online (Sandbox Code Playgroud)1 2 3表B中的Golumn
Run Code Online (Sandbox Code Playgroud)1 3 5
想要输出
1
2
3
5
Run Code Online (Sandbox Code Playgroud)
那是什么UNION呢
SELECT contract1 FROM TABLE1
UNION
SELECT contract2 FROM TABLE2
Run Code Online (Sandbox Code Playgroud)
编辑
您在评论中谈到的性能问题可能是由于其UNION本身的性质造成的; 幕后发生的事情是dbms分别执行两个语句然后distinct在结果集上应用a .在大型桌子上,后一步骤可能会导致整体性能出现问题,您可以通过切换到UNION ALL(不会执行distinct)来确认.
如果你不能满足UNION ALL,因为你不想要重复,我发现这篇有趣的文章提出了解决这类问题的方法.它涉及到表变量的使用,您可以使用两个语句填充,也可以从中选择以获取最终结果.
基本上是步骤
DECLARE @Result TABLE (
Contract varchar(50)
— Example of how to declare a PK within a table variable
PRIMARY KEY ( Contract )
)
INSERT @Result
SELECT Contract1
FROM Table1
INSERT @Result
SELECT Contract2
FROM Table2
SELECT *
FROM @Result
Run Code Online (Sandbox Code Playgroud)
但您可以在上面的链接中找到更详细的解释
| 归档时间: |
|
| 查看次数: |
781 次 |
| 最近记录: |