寻找SQL Server查询优化

问题描述 投票:0回答:2

我有一个在 SQL Server 中运行速度非常慢的查询。请建议优化它以使其运行更快。

  • TABLE_A
    有 100'000'000 行
  • TABLE_B
    有 1'000'000 行

两个表在

ID
Modify_Date
Source
列上都有非聚集索引。

查询:

Insert into TABLE_A       
  select * from RABLE_B B
  Where NOT Exists (Select 1 
                    From TABLE_A A
                    Where B.ID = A.ID
                      And B.Modify_Date = A.Modify_Date
                      And B.Source = A.Source)
sql-server query-optimization
2个回答
4
投票
INSERT  INTO TABLE_A
        SELECT  B.*
        FROM    TABLE_B B
                LEFT JOIN TABLE_A A ON B.ID = A.ID
                                   AND B.Modify_Date = A.Modify_Date
                                   AND B.Source = A.Source
        WHERE   A.ID IS NULL

0
投票

将表从堆表更改为

ID
上的集群表似乎应该有所帮助。如果
ID
不是唯一的,那么在所有三列上创建复合聚集索引将有助于提高连接速度,因为表中的数据将根据三列在页面上排序。

通过将聚集键设置为复合键,您所采取的权衡是插入和更新将花费更长的时间。但是,如果表结构设计得很好,并且插入和更新语句也设计得很好,那么这是一个值得采取的权衡。

最后,如果此表没有主键,则最好至少添加一个主键,因为您要查找

Table_B
上的所有列以插入到
Table_A
中。添加主键应该有助于优化器不必扫描表,而是使用查找来查找数据。

© www.soinside.com 2019 - 2024. All rights reserved.