Sql server 2008 内部连接占用了太多时间

Sql server 2008 内部连接占用了太多时间,sql-server-2008,Sql Server 2008,在我的数据库中,我有一个名为FinanceProfile的表。它有一个名为FinanceProfileId的列 我还有一张桌子叫FinanceProfileState。此表有一个名为FinanceProfileId的外键,该外键引用FinanceProfile表中的记录 我已存储了执行以下操作的proc:- 我有一个名为@MatchingContactFinancialProfiles的临时表 DECLARE @MatchingContactFinancialProfiles TABLE (

在我的数据库中,我有一个名为FinanceProfile的表。它有一个名为FinanceProfileId的列

我还有一张桌子叫FinanceProfileState。此表有一个名为FinanceProfileId的外键,该外键引用FinanceProfile表中的记录

我已存储了执行以下操作的proc:-

我有一个名为@MatchingContactFinancialProfiles的临时表

DECLARE @MatchingContactFinancialProfiles TABLE
( 
   FinanceProfileId int,
   ContactId uniqueidentifier
);  
@MatchingContactFinancialProfile包含FinanceProfile表的子集。它包含大约100行

FinanceProfileState表有大约4500个与@MatchingContactFinancialProfiles匹配的行

DECLARE @MatchingContactFinancialProfiles TABLE
( 
   FinanceProfileId int,
   ContactId uniqueidentifier
);  
我正在做这样的连接:

INSERT INTO @FinanceProfileStates
       SELECT distinct fpState.FinanaceProfileId, fpState.StateId
          FROM @MatchingContactFinancialProfiles fp inner JOIN FinanaceProfileState fpState
          on fp.FinanceProfileId = fpState.FinanaceProfileId
我运行了探查器,它从右到左显示:

Step 1: Table Scan @MatchingContactFinancialProfiles  - Cost 5%
Step 2:  A) Hash Match Aggregate- 19%
         B) Clustered Index Scan - Table - FinanaceProfileState  PK - FinanaceProfileStateId - 15%
Step 3: Hash Match - Inner Join - 38%
Step 4: Distinct Sort - 15%
Step 5: Insert @FinanceProfileStates - 8%
此查询占用存储过程中的大部分时间。如何使此查询运行得更快


欢迎提出任何意见和建议

您的
@MatchingContactFinancialProfiles
表变量上没有任何索引

试用

DECLARE @MatchingContactFinancialProfiles TABLE
( 
   FinanceProfileId int PRIMARY KEY,
   ContactId uniqueidentifier
);  

根据这一点,您还可以通过使用临时表而不是当前使用的表变量来获得更好的性能。

这大大缩短了时间。谢谢你的意见。然而,我希望它能少一点。一般来说,当我们在表上进行连接时,是否有一个拇指规则可以加快连接速度,例如在我们正在使用的列上使用索引。我总是尝试在索引列上进行连接。如果
fpState.FinanaceProfileId
未编入索引,则应添加一个。