【问题标题】:How to Optimize A query with Join如何使用 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
  • 连接中使用的列是整数,并且两列具有相同的数据类型。并且有很多无效的记录数。

标签: sql sql-server database sql-server-2008 query-optimization


【解决方案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$)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 2014-04-29
    • 2023-03-18
    • 2018-01-27
    • 2011-02-14
    • 1970-01-01
    相关资源
    最近更新 更多