在我的数据库中,我有一个名为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%
此查询占用存储过程中的大部分时间。我该怎么做才能让这个查询运行得更快?
欢迎任何想法和建议!!!!
答案 0 :(得分:1)
您的@MatchingContactFinancialProfiles
表变量上没有任何索引。
尝试使用
DECLARE @MatchingContactFinancialProfiles TABLE
(
FinanceProfileId int PRIMARY KEY,
ContactId uniqueidentifier
);
根据此link,您还可以使用临时表而不是当前使用的表变量来获得更好的性能。