我有两个单独的查询,它们只是基本选择,都返回一个不同的整数列。然后我需要将这两个整数列表组合在一起,以生成最终的单个不同的整数列表。
有没有比以下更快的方法呢?
SELECT DISTINCT ID
FROM dbo.Test
UNION
SELECT DISTINCT ID
FROM dbo.Test2
答案 0 :(得分:4)
如果您在每个表格中没有重复项,那么以下内容可能会更快:
UNION ALL
为此,您需要select id
from dbo.test
union all
select id
from dbo.test1 t1
where not exists (select 1 from dbo.test t where t.id = t1.id);
上的索引。
即使有重复项,以下内容也可能更快:
test(id)
这需要select distinct id
from dbo.test
union all
select distinct id
from dbo.test1 t1
where not exists (select 1 from dbo.test t where t.id = t1.id);
和test(id)
的索引。我们的想法是扫描索引以返回id。
答案 1 :(得分:1)
我认为在您的情况下,最快的方法是删除两个panginate($limit = null, $columns = ['*'])
,因为find($id)
无论如何都将删除所有重复项:
DISTINCT
请注意,这两个UNION
无论如何都不能保证两个序列的唯一性,这是SELECT ID
FROM dbo.Test
UNION
SELECT ID
FROM dbo.Test2
的作用。如果您不需要/想要使用DISTINCT
UNION
。