如何使用 Join 优化查询
Posted
技术标签:
【中文标题】如何使用 Join 优化查询【英文标题】:How to Optimize A query with Join 【发布时间】:2015-07-20 10:57:47 【问题描述】:我有一个在 5.4 亿条记录表上应用内部联接的查询。此查询耗时超过 9 小时。
我想优化查询,我该如何处理。
查询是-
Delete top(1000)
FROM table1 fact
INNER JOIN
table2 uu
ON uu.User1 = fact.User1
Where uu.Is_Archived$ = 'true'
and fact.Snapshot_Date$Snapshot_Date$ > uu.User_End_Date$
连接中使用的列是整数,并且两列具有相同的数据类型。并且有很多无效的记录数。
任何帮助都会很棒。谢谢!!!
【问题讨论】:
在优化查询时,有关表结构的信息非常重要。 您的查询真的有效吗?我认为在delete
之后需要from table name
。
连接中使用的列是整数,并且两列具有相同的数据类型。并且有很多无效的记录数。
【参考方案1】:
假设你的delete
真的是:
Delete top(1000) from fact
FROM table1 fact INNER JOIN
table2 uu
ON uu.User1 = fact.User1
Where uu.Is_Archived$ = 'true' and
fact.Snapshot_Date$Snapshot_Date$ > uu.User_End_Date$;
那么索引应该有助于查询。一种可能性是:table1(Snapshot_Date$Snapshot_Date$, User1)
和 table2(User1, IsArchived$)
。另一个是table2(IsArchived$, User1)
和table1(User1, Snapshot_Date$Snapshot_Date$)
。
【讨论】:
以上是关于如何使用 Join 优化查询的主要内容,如果未能解决你的问题,请参考以下文章