我有一个非常大的视图,其中包含500万条包含重复名称的记录,每行包含唯一的交易号。还存在包含唯一名称的9000条记录的另一视图。现在我想在第一个视图中检索其名称存在于第二个视图中的记录
select * from v1 where name in (select name from v2)
但查询需要很长时间才能运行。有没有捷径方法?
答案 0 :(得分:2)
您是否尝试过使用INNER JOIN
。这将返回两个表中存在的所有行:
select v1.*
from v1
INNER JOIN v2
on v1.name = v2.name
如果您需要帮助学习JOIN
语法,这里有一个很棒的visual explanation。
您可以添加DISTINCT
关键字,该关键字将删除查询返回的任何重复值。
答案 1 :(得分:2)
使用JOIN
。
DISTINCT
将允许您从列表中仅返回唯一记录,因为您从另一个表加入,并且可能存在记录在另一个表上可能有多个匹配的可能性。
SELECT DISTINCT a.*
FROM v1 a
INNER JOIN v2 b
ON a.name = b.name
为了提高性能,请在两个表的列NAME
上添加索引,因为您正在加入它。
要进一步了解联接,请访问以下链接: