INNER JOIN占用了太多时间

时间:2014-06-10 00:12:04

标签: sql-server-2008

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

我有另一个名为FinanceProfileState的表。该表有一个名为FinanceProfileId的外键,它引用FinanceProfile表中的记录。

我存储了proc,它执行以下操作: -

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

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

@MatchingContactFinancialProfiles包含FinanceProfile表的子集。它包含大约100行。

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

我正在做这样的联接:

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%

此查询占用存储过程中的大部分时间。我该怎么做才能让这个查询运行得更快?

欢迎任何想法和建议!!!!

1 个答案:

答案 0 :(得分:1)

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

尝试使用

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

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