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